「NeoLuaのインストールとハローワールド」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator |
Administrator (トーク | 投稿記録) |
||
13行目: | 13行目: | ||
「clr」で標準の名前空間にもアクセスできる。 | 「clr」で標準の名前空間にもアクセスできる。 | ||
<source lang="csharp"> | <source lang="csharp"> | ||
− | + | using (var lua = new Lua()) | |
− | + | { | |
− | + | dynamic g = lua.CreateEnvironment(); | |
− | + | g.dochunk(@" | |
− | + | s = 'hello world'; | |
− | + | clr.System.Console.WriteLine(s); | |
− | + | "); | |
− | + | } | |
</source> | </source> | ||
27行目: | 27行目: | ||
ついでにまったく関係ないことだがLuaでの文字列連結は「..」だ。 | ついでにまったく関係ないことだがLuaでの文字列連結は「..」だ。 | ||
<source lang="csharp"> | <source lang="csharp"> | ||
− | + | using (var lua = new Lua()) | |
− | + | { | |
− | + | var env = lua.CreateEnvironment(); | |
− | + | env.DoChunk(@" | |
− | + | name = 'foo'; | |
− | + | function Hello() | |
− | + | return 'hello ' .. name; | |
− | + | end | |
− | + | ","test.lua"); | |
− | + | var ret1 = env.CallMember("Hello"); | |
− | + | Console.WriteLine(ret1.ToString()); | |
− | + | env.SetMemberValue("name", "bar"); | |
− | + | var ret2 = env.CallMember("Hello"); | |
− | + | Console.WriteLine(ret2.ToString()); | |
− | + | } | |
</source> | </source> | ||
[[category: NeoLua]] | [[category: NeoLua]] |
2021年2月16日 (火) 05:14時点における最新版
インストール[編集 | ソースを編集]
ハロワ[編集 | ソースを編集]
まずは定番のハロワだ。
NeoLuaには2種類の実行環境がある。頭の固い人向けの静的版と、ユルユルな人向けのダイナミック版だ。
CreateEnvironmentメソッドの戻り値の型を、「var」(型推論)にすると静的版に、「dynamic」にするとダイナミック版になる。ダイナミック版はインテリセンスが効かない諸刃の剣であるが、ある程度慣れると圧倒的にこちらの方が便利かつ簡潔明瞭である。ちなみにダイナミック版のdochunkは小文字だぞ。
こういう書き方もできる。 「clr」で標準の名前空間にもアクセスできる。
using (var lua = new Lua())
{
dynamic g = lua.CreateEnvironment();
g.dochunk(@"
s = 'hello world';
clr.System.Console.WriteLine(s);
");
}
dynamic変数を使わない方法だとSetMemberValue()だのCallMember()などのメソッドを使う。 この場合のDoChunkはパスカル記法だ。 ついでにまったく関係ないことだがLuaでの文字列連結は「..」だ。
using (var lua = new Lua())
{
var env = lua.CreateEnvironment();
env.DoChunk(@"
name = 'foo';
function Hello()
return 'hello ' .. name;
end
","test.lua");
var ret1 = env.CallMember("Hello");
Console.WriteLine(ret1.ToString());
env.SetMemberValue("name", "bar");
var ret2 = env.CallMember("Hello");
Console.WriteLine(ret2.ToString());
}