【Lua】組み込み系言語総合 その6【Squirrel】at TECH
【Lua】組み込み系言語総合 その6【Squirrel】 - 暇つぶし2ch999:デフォルトの名無しさん
16/09/10 14:08:02.65 32Nzsdc+.net
コルーチン使えないのか
ゲームじゃないからなくてもいいだろうけど

1000:デフォルトの名無しさん
16/09/10 21:52:55.71 URrhv4S0.net
Luaのコルーチンってそんなにメモリ喰うイメージないけどな
変数空間を共有してるから増分はコールスタック程度しかないはずだが

1001:デフォルトの名無しさん
16/09/10 22:08:42.97 IwLF9FUl.net
C#の場合はコンパイル時に普通のクラスになるけどLuaはコルーチンをVMが対応しているん?

1002:デフォルトの名無しさん
16/09/10 22:55:58.05 URrhv4S0.net
C#とは違うね。Lua VMはコルーチンを動かす処理そのものだから
メインスレッド = グローバル変数テーブル + コルーチン でできてる

1003:デフォルトの名無しさん
16/09/10 23:32:04.82 IwLF9FUl.net
>>988
糖衣構文ではなかったのか
何故かコルーチン関係がキーワードじゃなくてメソッドだし

1004:デフォルトの名無しさん
16/09/20 23:56:31.17 8JrnwUlq.net
LuaでOO的なコーディングをする場合にメソッド内でローカル変数って使えないんですかね?
>type test.lua
CLASS = {
new = function()
x = 0
return setmetatable({}, {__index = CLASS})
end,
func1 = function()
print(x)
end
}
obj = CLASS.new()
obj.func1()
この場合のxはインスタンス変数ですよね?
>luajit test.lua
0

1005:デフォルトの名無しさん
16/09/21 07:08:55.54 8q78VamI.net
>>990
その書き方だとグローバル変数の x を見にいってる
Luaはselfを省略できないから
{ ..., func1 = function(self) print(self.x) end }
にするか、もしくは { } の外で : を使う
function CLASS:func1() print(self.x) end

ところで次スレも同じタイトルでいいの?
LuaはともかくSquirrelは今や…

1006:デフォルトの名無しさん
16/09/21 18:50:26.73 eYdYUvGQ.net
じゃあmrubyで

1007:987
16/09/22 03:54:45.83 Ru9TIBDm.net
>>991
Luaのデフォルトのスコープはグローバルなんか・・・

というかこの統一性がない仕様はすっきりしないなぁ
string.to_number_ulong = function(self) ←これは意図したとおりに使える

end
number.to_binary_ulong = function(self) ←これはnumberが無いと怒られて動かない

end
5.1だとビット演算がないからこのような変換も手間だし

1008:デフォルトの名無しさん
16/09/22 06:26:50.65 t8yALPnl.net
>>993
その例から「意図」が読み取れないから何とも言えない
統一性がない仕様もなにも、自分で定義している関数に不満を漏らす意味がわからない

>>990 も CLASS = { ... } はあくまで連想配列の定義だから
連想配列要素の定義中に兄弟要素の変数を参照しないのは言語に限らず当たり前だぞ

1009:デフォルトの名無しさん
16/09/22 13:55:49.27 62PEa5hX.net
5.1はdoubleとintを使い分けるよりintを捨てた方が統一性があると判断したんだな
だからビット演算がない
同様に、連想配列とオブジェクトを統一するためオブジェクトを捨てる

でも連想配列とdoubleのどっちかを捨てるのは無理だからそこは統一性がない

1010:デフォルトの名無しさん
16/09/22 14:25:23.06 t8yALPnl.net
意味がわからん
ビット演算は5.3で採用されたし、doubleとintはスクリプトからは意識されない
連想配列と統一するために捨てたオブジェクトとは何のことだ?
連想配列とdoubleの統一性のなさとは何だ?メタテーブルがあり演算子の定義もできるのに

1011:デフォルトの名無しさん
16/09/22 14:41:12.52 62PEa5hX.net
ほんとオブジェクトって何のことだろうね
意味がわからんから捨てる

1012:987
16/09/22 14:44:50.84 Ru9TIBDm.net
>>994
判りにくくてスマン。


1013:number.to_binary_ulongは定義自体が出来ないです >type test.lua string.to_number_ulong = function(self) --←これは定義できる --(略)4バイトの文字列をunsigned longに変換するコード end number.to_binary_ulong = function(self) --←これは定義できない --(略)unsigned longを4バイトの文字列に変換するコード end s = "\226\167\100\53" print(s:to_number_ulong()) --バイナリ文字列を数字に変換(意図した動作) n = 895789026 print(n:to_binary_ulong()) --こんな感じで使いたい。数字をバイナリ文字列に変換 >luajit test.lua luajit: test.lua:4: attempt to index global 'number' (a nil value) stack traceback: test02.lua:4: in main chunk [C]: at 0x004020e0 リファレンスマニュアルがショボいためにググってばっかりで捗らん・・・



1014:デフォルトの名無しさん
16/09/22 15:27:10.87 62PEa5hX.net
歴史的に、演算子といえばnumberの演算子しかなかった
昔の言語にはstringの演算子がなかったからstringには関数が必要
numberにはあまり必要なかった
その影響で string.* という関数は色々あるが number.* は一個もない

1015:デフォルトの名無しさん
16/09/22 15:31:44.15 t8yALPnl.net
>>998
ああそういう意味か
"string" は文字列型のメタ __index にも登録してあるから、それでいける
| The string library ... also sets a metatable for strings ...

"number" は初期設定では存在しないが、自分で定義して
lua_setmetatable (in C) なり debug.setmetatable (in Lua) で
数値型のメタ __index として登録すれば、やりたかった動作になるだろう

このあたりは伝統的にnumberのメソッドよりも、mathモジュールやstring.formatで賄うことが多かったから仕方ない
ホスト側の作成者の美的センスで適当に改造すべき箇所なんだろうな

1016:987
16/09/22 16:31:47.44 Ru9TIBDm.net
>>1000
ありがとう。リファレンスマニュアルにも使用例がないので
試行錯誤してこんな感じになった。まぁ動けばいいか
>type test.lua
number = {}
debug.setmetatable(0, {__index = number})
number.to_binary_ulong = function(self)
--(略)unsigned longを4バイトの文字列に変換するコード
end
n = 1684234849
print(n:to_binary_ulong())
>luajit test.lua
abcd

1017:987
16/09/22 18:13:01.03 Ru9TIBDm.net
>>996
>メタテーブルがあり演算子の定義もできる
を見て思うところがあったのでリファレンスマニュアルを見たけど__addくらいしか書いていなくて何を定義できるのか判らない
ググってみるとメタテーブルチュートリアル的なのが出てくるけど[]とか[]=とかの定義は出来ないっぽい?
これを定義できると配列みたいな動作をするオブジェクトの使い勝手が良くなるんだけどな

1018:デフォルトの名無しさん
16/09/22 18:24:14.43 t8yALPnl.net
新スレ
スレリンク(tech板)l50

1019:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch