1 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 15:10:32.28 .net] LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で 使われるプログラミング言語についてのスレッドです まとめwiki(なにか質問する前に必ずみること!) wikiwiki.jp/lua/ その他の参考URLは>2から ■前スレ 【Lua】組み込み系言語総合 その5【Squirrel】 toro.2ch.net/test/read.cgi/tech/1321063450/ ■過去スレ その4 hibari.2ch.net/test/read.cgi/tech/1301414458/ その3 hibari.2ch.net/test/read.cgi/tech/1272643397/ その2 pc12.2ch.net/test/read.cgi/tech/1243210301/ その1 pc12.2ch.net/test/read.cgi/tech/1205208141/ プログラミング言語 Lua その3 pc11.2ch.net/test/read.cgi/tech/1160799232/
970 名前:デフォルトの名無しさん [2016/07/19(火) 22:51:15.91 ID:Uci7C8fw.net] require(’module_name’)としたとき何を行うかはその読み込んだモジュールしだい 最近のものはグローバル環境を汚すのを嫌って勝手に代入せずテーブルを返すのが推奨されているから module=require(’modname’) って書く
971 名前:デフォルトの名無しさん [2016/07/19(火) 22:54:48.00 ID:5Ru68Qww.net] >>957 何となく分かった気がする ありがとう
972 名前:デフォルトの名無しさん [2016/08/02(火) 15:28:41.79 ID:vpqNpIG1.net] 継承って local self=BaseClass.new(); self.hoge=0; return setmetatable( self, { __index = Class } ); でいいんでしょうか? 色々な方法が書いてあってどれをすればいいか分かりません
973 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:42:21.39 ID:rXn2IC8I.net] >>959 色々な方法があるから、使うフレームワークが推奨する方式に従うべき 特にそういう縛りがなければ自分で考えてみてもいいが 汎用性が高いのはJavaScriptと同じ方式だとは思う
974 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:00:37.77 ID:qJ2YHFft.net] その色々な方法ごとに新しい言語を作るのが普通 一つの言語で色々やってるのは珍しいが効率は良い
975 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 08:06:53.16 ID:8fjgpLNn.net] 効率は悪いだろう? 開発者間で連携もしづらい まぁLuaだと組み込み環境ごとに全く別の言語だと思ったほうが良いんだろうけど
976 名前:デフォルトの名無しさん [2016/08/04(木) 09:23:50.33 ID:Mm46IUtm.net] https://www.lua.org/pil/16.2.html 本家に書いてあるやん
977 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 20:01:15.52 ID:aMt1KCpE.net] >>963 お手本を作ってクローンさせる方式だね 一般的なクラスとインスタンス方式にこだわりがなければLuaらしいやり方だ
978 名前:デフォルトの名無しさん [2016/08/05(金) 22:47:51.66 ID:K6ts8EaK.net] 継承のやり方は分かりました ありがとうございます もう一つあるんですが、動的に引数を指定したり複数の戻り値を返したりすることは出来ますか? hoge(1,2,3)と通常は呼び出す物をhoge({1,2,3})と呼び出したり、 return 1,2,3; を return {1,2,3} のように配列を使って動的に指定したいです
979 名前:デフォルトの名無しさん [2016/08/05(金) 23:10:53.81 ID:K6ts8EaK.net] unpackで出来ました すみません
980 名前:デフォルトの名無しさん mailto:sage [2016/08/26(金) 15:28:57.81 ID:BDiBxktH.net] luaL_requiref(L, ...) の次にlua_pop(L, 1) を入れるのはなぜですか?
981 名前:デフォルトの名無しさん mailto:sage [2016/08/26(金) 17:19:18.70 ID:LCNVy+4G.net] >>967 luaL_requirefはロードしたモジュールをスタックに残すから それをスタックから取り除いている LuaのC APIはスタックを意識する必要がある マニュアルにある [-0, +1, e] のような箇所で説明されている
982 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 07:51:02.13 ID:O603KyWm.net] >>968 ありがとうございます。 スタックから取り除いても大丈夫(モジュールは使える)ということなのでしょうか? もしそうならスタックに積まれるのはなぜなのですか?
983 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 14:07:28.83 ID:A/8rNEYu.net] >>969 Luaの疑似コードだと local m = require("module") m = nil のような動作だと考えてくれ。 moduleが何かを返すタイプならスタックに積まれた m を使うことになるだろうし グローバル変数を追加するタイプなら取り除いても(グローバル経由で)使えるだろう。
984 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 18:22:57.78 ID:9ixLGi86.net] >>970 よく分かりました。ありがとうございました。
985 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 18:19:09.71 ID:GHpvw+VU.net] 少しスレタイとは離れるかもしれないんだけど、開発環境について教えて欲しい 今まではメモ帳(付属のじゃないよ)だけで一つか複数のファイル開いてシコシコ書いてたんだけど、 数百から千くらいのファイル群のゲームの解析というか関数なんかの検索に、メモ帳では太刀打ちできなくて困ってます 出来たら沢山開けるメモ帳的な簡易的な物が良いんだけど、OSにインスコして、関連付けもしてくれちゃって・・・っていうのはむしろ要らない、アーカイブ展開したらすぐ使えるのがいいです よろしくお願いします。
986 名前:デフォルトの名無しさん [2016/09/08(木) 18:46:36.03 ID:2gFs3OWY.net] VSCodeおすすめ OS非依存だからwin以外でも使える
987 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 19:45:27.86 ID:oP5NpzJh.net] Atom.io
988 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 21:07:48.97 ID:GHpvw+VU.net] 即レスありがとうございます。試してみます
989 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 21:43:20.24 ID:++lP9HIx.net] Luaで書かれたPHPインタプリタってないかな
990 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 00:03:26.44 ID:mCfQwN8m.net] なんでそんな無駄なことするの
991 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 01:31:15.83 ID:1lwBEIiL.net] >>977 FlashAirでPHPを実行できないかなーとか考えた
992 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 06:33:19.86 ID:URrhv4S0.net] ライブラリの比重が大きな言語に対して構文解釈だけができても嬉しくない
993 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 09:08:02.15 ID:CKZv9HiE.net] あってもFlashAirは内部メモリが小さいから無理っぽい
994 名前:デフォルトの名無しさん [2016/09/10(土) 10:14:04.84 ID:32Nzsdc+.net] FlashAirってLua動かせるのかよ
995 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 13:14:30.12 ID:1lwBEIiL.net] >>980 そうか、残念 >>981 最新モデルのW-03のみだけどLuaインタプリタを内蔵している FlashAir Developers - APIガイド - Lua機能 ttps://flashair-developers.com/ja/documents/api/lua/ FlashAirのプログラミングにも使えるしCGIとしても使える
996 名前:デフォルトの名無しさん [2016/09/10(土) 13:27:13.60 ID:32Nzsdc+.net] >>982 ただのPCに転送できるSDカードと思ってたわ よくあのサイズで内臓出来たな…技術凄い
997 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 13:51:44.5
] [ここ壊れてます]
998 名前:9 ID:1lwBEIiL.net mailto: >>983 興味があるなら>>982 のWebサイトのドキュメント→本の中にあるFlashAir Doujinshi 2を読んでみると良いよ 電子工作メイン(FlashAirのプログラミング)だけど裏話の他Luaによるプログラミング例がいくつか載っている [] [ここ壊れてます]
999 名前:デフォルトの名無しさん [2016/09/10(土) 14:08:02.65 ID:32Nzsdc+.net] コルーチン使えないのか ゲームじゃないからなくてもいいだろうけど
1000 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 21:52:55.71 ID:URrhv4S0.net] Luaのコルーチンってそんなにメモリ喰うイメージないけどな 変数空間を共有してるから増分はコールスタック程度しかないはずだが
1001 名前:デフォルトの名無しさん [2016/09/10(土) 22:08:42.97 ID:IwLF9FUl.net] C#の場合はコンパイル時に普通のクラスになるけどLuaはコルーチンをVMが対応しているん?
1002 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 22:55:58.05 ID:URrhv4S0.net] C#とは違うね。Lua VMはコルーチンを動かす処理そのものだから メインスレッド = グローバル変数テーブル + コルーチン でできてる
1003 名前:デフォルトの名無しさん [2016/09/10(土) 23:32:04.82 ID:IwLF9FUl.net] >>988 糖衣構文ではなかったのか 何故かコルーチン関係がキーワードじゃなくてメソッドだし
1004 名前:デフォルトの名無しさん mailto:sage [2016/09/20(火) 23:56:31.17 ID: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 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 07:08:55.54 ID:8q78VamI.net] >>990 その書き方だとグローバル変数の x を見にいってる Luaはselfを省略できないから { ..., func1 = function(self) print(self.x) end } にするか、もしくは { } の外で : を使う function CLASS:func1() print(self.x) end ところで次スレも同じタイトルでいいの? LuaはともかくSquirrelは今や…
1006 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 18:50:26.73 ID:eYdYUvGQ.net] じゃあmrubyで
1007 名前:987 mailto:sage [2016/09/22(木) 03:54:45.83 ID:Ru9TIBDm.net] >>991 Luaのデフォルトのスコープはグローバルなんか・・・ というかこの統一性がない仕様はすっきりしないなぁ string.to_number_ulong = function(self) ←これは意図したとおりに使える 〜 end number.to_binary_ulong = function(self) ←これはnumberが無いと怒られて動かない 〜 end 5.1だとビット演算がないからこのような変換も手間だし
1008 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 06:26:50.65 ID:t8yALPnl.net] >>993 その例から「意図」が読み取れないから何とも言えない 統一性がない仕様もなにも、自分で定義している関数に不満を漏らす意味がわからない >>990 も CLASS = { ... } はあくまで連想配列の定義だから 連想配列要素の定義中に兄弟要素の変数を参照しないのは言語に限らず当たり前だぞ
1009 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 13:55:49.27 ID:62PEa5hX.net] 5.1はdoubleとintを使い分けるよりintを捨てた方が統一性があると判断したんだな だからビット演算がない 同様に、連想配列とオブジェクトを統一するためオブジェクトを捨てる でも連想配列とdoubleのどっちかを捨てるのは無理だからそこは統一性がない
1010 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 14:25:23.06 ID:t8yALPnl.net] 意味がわからん ビット演算は5.3で採用されたし、doubleとintはスクリプトからは意識されない 連想配列と統一するために捨てたオブジェクトとは何のことだ? 連想配列とdoubleの統一性のなさとは何だ?メタテーブルがあり演算子の定義もできるのに
1011 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 14:41:12.52 ID:62PEa5hX.net] ほんとオブジェクトって何のことだろうね 意味がわからんから捨てる
1012 名前:987 mailto:sage [2016/09/22(木) 14:44:50.84 ID: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 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 15:27:10.87 ID:62PEa5hX.net] 歴史的に、演算子といえばnumberの演算子しかなかった 昔の言語にはstringの演算子がなかったからstringには関数が必要 numberにはあまり必要なかった その影響で string.* という関数は色々あるが number.* は一個もない
1015 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 15:31:44.15 ID: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 mailto:sage [2016/09/22(木) 16:31:47.44 ID: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 mailto:sage [2016/09/22(木) 18:13:01.03 ID:Ru9TIBDm.net] >>996 の >メタテーブルがあり演算子の定義もできる を見て思うところがあったのでリファレンスマニュアルを見たけど__addくらいしか書いていなくて何を定義できるのか判らない ググってみるとメタテーブルチュートリアル的なのが出てくるけど[]とか[]=とかの定義は出来ないっぽい? これを定義できると配列みたいな動作をするオブジェクトの使い勝手が良くなるんだけどな
1018 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 18:24:14.43 ID:t8yALPnl.net] 新スレ echo.2ch.net/test/read.cgi/tech/1474536226/l50
1019 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています