2017-01-29 1 views
3

編集を新しいコマンドを作成する方法:私はLuaのインタプリタで

だから、Luaのインタプリタであなたは明らかに

> functionNameを(functionArgs)のような機能で構築呼び出すことができますUbuntuの上だ

私が入力するたびにルアインタプリタが認識する新しい機能を作りたいと思います。

ルアインタプリタのネイティブに認識された関数のリストに自分の関数を追加する方法があるので、私が書き込んだファイルにdofile()を呼び出してそこから実行する必要はありません。

TLDRは、私はいつでもLuaのインタプリタで

> myNewFunction(functionArgs)を入力できるようにしたいとインタプリタが自動的に私が何を言っているかの機能を知ってい。

もし私がどのディレクトリにいても私がdofile(myFile)を実行することができないのであれば、ルアインタプリタは自分の関数を含む特定のファイルを常に見つけることができますか?

ありがとうございました!

答えて

7

を見て事はLUA_INITである(またはLUA_INIT_5_3、...)環境変数:オプション-Eなしで呼び出さ

、環境変数LUA_INIT_5_3(またはLUA_INITのインタプリタをチェックし、バージョン名がない場合には定義された)。可変コンテンツのフォーマットが@filenameの場合、luaがファイルを実行します。それ以外の場合は、luaが文字列自体を実行します。
- https://www.lua.org/manual/5.3/manual.html#7

あなたは機能の固定されたリストを持っている場合、あなたは、単にファイルを作成することができますし、そのファイルに自分の関数を入れて、のいずれかを設定する(例えば、${HOME}/.lua_init.luaをWindows上で多分%APPDATA%\somethingまたは%USERPROFILE%\somethingを試してみてください。) LUA_INITという環境変数がそのファイルを指し、ファイルパスの先頭に '@'が付いています。 unixoid OSENのための小さな例:

$ cd  # just to ensure that we are in ${HOME} 
$ echo "function ping() print 'pong' end" >> .lua_init.lua 
$ echo 'export LUA_INIT="@${HOME}/.lua_init.lua"' >> .profile 
$ source .profile 
$ lua 
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio 
> ping() 
pong 

(Windowsの場合、以下のEgor Skriptunoffによってコメントを参照してください。)


あなたは自動的にカレントディレクトリからのものをロードしたい場合は、それが困難になります。簡単な方法は上記を設定し、次に例を追加することです。

-- autoload '.autoload.lua' in current directory if present 
if io.open(".autoload.lua") then -- exists, run it 
    -- use pcall so we don't brick the interpreter if the 
    -- file contains an error but can continue anyway 
    local ok, err = pcall(dofile, ".autoload.lua") 
    if not ok then print("AUTOLOAD ERROR: ", err) end 
end 
-- GAPING SECURITY HOLE WARNING: automatically running a file 
-- with the right name in any folder could run untrusted code. 
-- If you actually use this, add a whitelist of known-good 
-- project directories or at the very least blacklist your 
-- downloads folder, /tmp, and whatever else might end up 
-- containing a file with the right name but not written by you. 

,LUA_INITファイル。すると、自動的にロードされ、必要に応じて.autoload.luadofileそのSまたはrequireのファイルを作成するためのプロジェクト/ディレクトリに固有の機能を取得するには、関数を定義して、...(フォルダごとに余分なファイルを必要としない)

ファンシーなソリューションになります実行するのは難しいですが、必要なものを構築するために任意のLuaコードを実行することができます。

+3

Windowsの場合:コントロールパネル - >システム - >環境 - >環境変数 - >ボタン "新規" - >変数名 'LUA_INIT'と変数値' @%USERPROFILE%\ auto load.lua'を設定し、 "OK" "ボタンを押して、ファイル' notepad "%USERPROFILE%\ auto load.lua"を編集して保存してください。 ** fresh ** Windowsコンソールウィンドウを開く(既に開いているコンソールウィンドウには新しい環境変数は表示されません)、 'lua.exe'を実行してください。あなたのファイル 'auto load.lua'はすでにLuaにロードされており、そこに定義されているすべての関数が利用できます。 –