16/04/09 13:38:58.58 u1ofpue+.net
>>890
引数にしたら引数の仕様がごちゃごちゃになってくると思うんだけど。
引数を受け取るだけの関数を渡せとなるなら尚更
911:デフォルトの名無しさん
16/04/09 14:08:41.76 u1ofpue+.net
>>891
別にluaに限定する必要ないよ
引数で返すのが合理的に見えるコードであれば
C言語みたいに返値を一つしか返せないからって理由なのは無意味だから外して欲しいけど。
>>893
何もしなかったらそのままアプリが終了するだけじゃん
個人的にはtry catchは要らないかな。Goが例外無くしたのと同じ理由で
912:デフォルトの名無しさん
16/04/11 08:27:07.88 k7zVs+aP.net
>>900
確かにGo的なのでいいかもな。
URLリンク(www.geocities.jp)
足りないのはdeferとrecoverかな?
deferは__gcメタテーブル使えばできそうだけど標準で欲しいな。
recover はわからん。
913:デフォルトの名無しさん
16/04/11 08:58:49.07 WTwt1caF.net
>>901
deferのようなものは例外とは関係無いところが理由で欲しいね
途中returnでclose書くの面倒とかそういう所で
gcに任せてたらいつ実行されるかわからんし
recoverはpcallでいいんじゃないかな
914:デフォルトの名無しさん
16/04/11 09:29:17.60 AFQC7gKw.net
try catch は大域脱出に使うから、無くすなら別途機構が欲しいやね
915:デフォルトの名無しさん
16/04/11 10:19:40.88 UaC8pXHz.net
>>902
Luaのソースを読んでると
スコープを抜けるタイミングでクロージャのupvalueを閉じる処理があるから
その辺りを改造すると、スコープ終了時に何かする機能が追加できる気がした。
916:デフォルトの名無しさん
16/04/12 00:55:24.80 JDMXFvBX.net
PC版は今日発売のdarksouls3もLua使ってるのな
917:デフォルトの名無しさん
16/04/12 01:26:42.97 fKt10c2M.net
たしかクソ1の頃からLuaのクレジットあったぞ
918:デフォルトの名無しさん
16/04/13 22:16:47.11 PD+aqUpV.net
しかもLuaJITじゃなくて本家Luaなんだな
負荷が高いものはCやC++で書けばいいしやっぱ速度はそれ程重要じゃないのな
919:デフォルトの名無しさん
16/04/13 22:23:51.85 7YNUgm8C.net
なにかのエディタで補完を効かすことはできますか?
例えば、メッセージテーブルみたいなのをloadfileで読み込んで使いたいです。
MSG.PLEASE_INPUT_ANY_KEY
920:デフォルトの名無しさん
16/04/14 08:00:44.86 PaNxRcDi.net
>>904
スコープというのはブロック単位のことだと思うんだけど
確かにブロック単位でdeferができれば便利ですな。
個人的にはdeferという単語はイマイチだけど
921:デフォルトの名無しさん
16/04/14 08:31:22.32 PaNxRcDi.net
それとも goto で十分なんだろうか
922:デフォルトの名無しさん
16/04/14 12:08:10.65 z7Vrjvws.net
>>910
何か勘違いしてない?
923:デフォルトの名無しさん
16/04/14 17:46:31.38 PaNxRcDi.net
>>911
なぜ勘違いしてると感じたの?
924:デフォルトの名無しさん
16/04/15 00:30:26.65 MuKGbCph.net
>>912
突然gotoが出てきたから
925:デフォルトの名無しさん
16/04/15 04:18:23.81 +t9YcmSi.net
頭で思ったことを全て言語化してないから唐突な感じになる
でも思ったことをそのまま喋ったら明らかな失言や暴言や嘘も増える
脅迫や詐欺みたいな発言を連発するよりは、少し意味不明な方がマシじゃないか
926:デフォルトの名無しさん
16/04/15 07:45:58.29 Hp4CXrU7.net
>>913
だってさ、たとえば ::finally:: というラベルを作って、
if エラー発生 then goto finaly end とかやればいっしょじゃね?
927:デフォルトの名無しさん
16/04/15 08:24:11.24 uS8f5f96.net
>>915
全然違う。それだと途中でreturn出来ないし、しないように注意しなければいけない。
コーデイング規約でreturnはfinallyラベルの後の一つだけにするって定めるつもり?
それに後処理が必要になるものはそのすぐ近くにそれを書きたいもの。
928:デフォルトの名無しさん
16/04/15 08:41:49.74 +t9YcmSi.net
1. finallyに行きたくなければreturn出来る
2. 行きたくない人などいるはずがないからreturn出来ない
929:デフォルトの名無しさん
16/04/15 09:10:31.83 9cTSD0EJ.net
>>915
「エラー処理をどうするか」なら良いのだけれど、話の流れは
「エラー処理を忘れないようどうするか」だったと思うんだ。
Luaに限れば、必ず後始末したい場合は pcall が必須なのがメンドイ。
930:デフォルトの名無しさん
16/04/15 09:56:06.34 Hp4CXrU7.net
returnの話も、pcallの話も全て理解できるよ。
ただそういうのは織り込み済みの上で gotoで足りると中の人は考えてるのかもしれないなぁ、ということ。
これって勘違いというほどのもの?
931:デフォルトの名無しさん
16/04/16 15:05:29.04 ls9rc/e1.net
そもそもエラー復帰処理を組み込み言語側に書かせるべきなのだろうか?
例えばホスト側が「文字列を丸ごとファイルに書き出す」機能を公開すれば
スクリプト側で「失敗したらファイルを閉じて削除して~」などと考えず済む。
汎用言語なら細かい粒度のAPIのほうが小回りが利くけど
所詮組み込み言語なんだから「どのように」ではなく「何をしたい」単位で記述させたほうが良い。
932:デフォルトの名無しさん
16/05/01 13:23:19.66 tKi6j9CT.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
URLリンク(twitter.com)
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
0
933:デフォルトの名無しさん
16/05/15 09:01:08.96 WYUaDR6g.net
luabindオリジナルは更新止まってて5.2すら使えないしfork多すぎてどれ使えばいいか解らん
934:デフォルトの名無しさん
16/05/15 12:38:52.61 llz61aSC.net
プログラマなら自分で作っちゃいなYO!
車輪の再発明?知らんな!
935:デフォルトの名無しさん
16/05/15 12:41:10.00 WYUaDR6g.net
>>923
それだと意味が無いんですよ
936:デフォルトの名無しさん
16/05/15 12:42:54.01 ZVMufeYJ.net
自分の1年前のバインダ引っ張り出したら目を背けたくなるコードで
結局リファクタリングしたなんてこともあったな
効率はともかく他人のコードのリファクタリングも結構勉強になるし
とりあえず無難そうなのを選んで落としてデッドコピーしてみたら?
937:デフォルトの名無しさん
16/05/15 13:13:01.22 WYUaDR6g.net
色々なlua binder使ったときのベンチマーク書いててluabind使うこと自体が目的なんですよね
なので、ぱっと見修正量多いから自分で修正したくないしメンテもしたくないから何処かから引っ張ってこれるのが理想なんですけど
欲を言えば5.1以降全部に対応してたらいいんですが…
938:デフォルトの名無しさん
16/05/15 13:30:11.07 iV9cVQst.net
kaguyaが使いやすそう
939:デフォルトの名無しさん
16/05/17 15:46:15.62 WJtZW0Wv.net
autotouchで音ゲーマクロを組みたいと思ってるんですが
タップからタップまでをusleepで停止させると後半になるにつれ目的の時間から遅れてしまいます
もちろん処理にかかる時間をはusleepから引いています
処理を停止させる命令はusleepの他にはないでしょうか
遅れる原因が何故だか分かりますか?
940:デフォルトの名無しさん
16/05/17 16:16:50.99 awF8sDTJ.net
>>928 とりあえず >>716 に似たような質問があるな。 「目的の時間」と「処理にかかる時間はusleepから引いて」あたりを 詳しく説明してもらわないとコメントのしようがないと思う。 現状の処理が適切かわからないし、むしろ音ゲー側の時間がずれている恐れも。
942:デフォルトの名無しさん
16/05/17 16:37:01.75 WJtZW0Wv.net
>>929
過去にあったんですね、遡ってみます
os.clockでタップ処理にかかる時間を計ってusleepの停止時間からマイナスしてます
943:デフォルトの名無しさん
16/05/17 17:11:06.80 aW8j1xwW.net
>>930
前にも書いたけどos.clockは実際の経過時間ではなくプログラムが使ったCPUの時間を返す
sleepとかで待ってる間は増えないし、例えばそのプログラムで二つのコアが100%使われてる場合は実時間の二倍増える
Cのclock関数で実装されていて、それはLinuxだとclock_gettimeのCLOCK_PROCESS_CPUTIME_IDの返す値が使われてる。
944:デフォルトの名無しさん
16/05/17 17:24:24.06 WJtZW0Wv.net
>>931
タップ処理ににかかる時間を計るのに使ってます
問題の待機時間には使ってないです
コアが2つ使われてたら2倍っていうのは気になりますが前半は目的のタイミングでタップされているので問題ないですかね…
945:デフォルトの名無しさん
16/05/17 17:54:24.20 awF8sDTJ.net
>>932
タップ処理にかかった実時間とCPU時間が等しい保証が無いという意味。
君が欲しいのは「実時間」だが、os.clockは「CPU時間」だから加減算できない。
身長と体重の値を足すようなもの。
(Luaからデフォルトで使える) 標準Cだけだと1秒より良い精度は無理と言われてる。
URLリンク(stackoverflow.com)
| There is no ANSI C function that provides better than 1 second time resolution
autotouch APIに高精度タイマーは用意されてないかな?
Lua から clock_gettime 等を呼ぶモジュールを加えるのも難しいか?
なお、Windowsのclockは(あえて)実時間を返すようだ。誤解が多い原因かもしれない。
URLリンク(msdn.microsoft.com)
| The elapsed wall-clock time since the start of the process
| Note that this is not strictly conformant with ISO C99
946:デフォルトの名無しさん
16/05/17 20:04:41.45 aW8j1xwW.net
>>933
補足サンキュー
しかしCPU時間返されてもベンチマークぐらいしか使い道ないよね。
でも文句はそれしか用意してない標準Cに言うんだ。Luaは高い移植性のために標準Cから外れる物は極力実装しないんだ
947:デフォルトの名無しさん
2016/05/18
948:(水) 08:00:35.07 ID:6L3zAH6b.net
949:デフォルトの名無しさん
16/05/18 09:46:49.35 k2SHVqf6.net
clockってプロセッサ使用時間で課金していた時代の名残じゃねーの?
名前に騙されて、古代の課金処理を現代のプログラムで使うからおかしくなるんだよ
950:デフォルトの名無しさん
16/05/18 15:47:48.90 bch1M3Ro.net
返事が遅れてしまいすみません
皆さんありがとうございます
autotouchのAPIになさそうです
autotouchでclock_gettime使ってみます
951:デフォルトの名無しさん
16/05/25 01:28:46.05 PQF3VaRV.net
この業界に限り車輪の再発明はさほど問題でない
あーだこーだ探したり高いライセンスを払うより
1から自分で作ったほうが速い場合も多々ある
952:デフォルトの名無しさん
16/05/26 10:31:37.40 lpov0tDn.net
メモリが潤沢な環境でのゲーム向けに0から作れば
組み込みを意識してVM自体をなるべくROMにおいやったり
定数になるべくデータを追いやったりしてRAMやスタックの消費量抑えたりみたいな細工をする事無く
素直でわかりやすく、高速なコード書き放題だもんな
953:デフォルトの名無しさん
16/05/26 10:49:26.89 LqK2D4Ix.net
自分で作ったほうが速い場合は少ないだろうが
自分で作ったほうが早い場合はありそうだな
954:デフォルトの名無しさん
16/05/26 18:41:47.35 iZpcR2mh.net
ハード面も自分でカスタマイズできるのが最善だけど
なかなかそうはいかないよね
955:デフォルトの名無しさん
16/05/26 22:46:21.63 kkdzC4Pz.net
FPGAがCPUみたいにソケット化して1個単位で買えるようになったらいいなぁ
956:デフォルトの名無しさん
16/05/27 03:25:00.38 fvoGjXwU.net
スレ間違えてない?
957:デフォルトの名無しさん
16/05/31 20:56:31.07 J6Jy3eBO.net
mrubyの事はココでおk?
gr-sakura2ボードが新たに発売されたんでmrubyやろうと思ったら、ライブラリとかv2なっててどうしようかと。
mruby入りスケッチビルド通ったんで焼いてもだんまりだわ。デバッグする方法あるのかな(汗
958:デフォルトの名無しさん
16/06/01 22:16:27.31 ItE+il1R.net
mrubyはここでもいいと思うが
gr-sakuraは別の意味の組み込みじゃなかろうか
959:デフォルトの名無しさん
16/06/07 13:17:30.66 Cceun6yB.net
Lua 5.3.3 released
Luaのメンテナンス・ポリシーだと最新版しかバグ修正されないのね
最近見つかった昔からあるバグでも5.3しか修正版が出ない
diff形式で公開されているから自分でどうにかしろってことか
960:デフォルトの名無しさん
16/06/07 15:13:34.60 1jTwDXeQ.net
どこかのOSみたく互換性無視ってわけじゃないし
961:デフォルトの名無しさん
16/06/11 10:50:09.10 8vn3zKAG.net
グローバル関数ではなく、メンバー関数をc#から呼ぶにはどうしたらいいでしょうか?
function Hoge
return{
Foo=function end
};
end
みたいなクラスです
962:デフォルトの名無しさん
16/06/11 10:50:57.07 8vn3zKAG.net
NLuaを使っています
963:デフォルトの名無しさん
16/06/11 17:55:08.38 XziS+43H.net
使ってないからよくしらんけど
var foo = ...
foo["Foo"]();
とかでいけるんじゃない?
964:デフォルトの名無しさん
16/06/11 18:00:29.69 8vn3zKAG.net
>>950
キャストしてCall呼び出したらいけました
965:デフォルトの名無しさん
16/07/16 14:37:12.17 ClCwwHut.net
CRuby使いだがインタプリタごと配布するにはでかすぎるのでLua5.3.3とmruby1.2.0を試してみた
ひとまずデバッグ用にバイナリ文字列をHexダンプするコードを書いてみる
Lua5.3.3(UPX圧縮後で250,064 Byte)
path = "C:/Windows/system32/calc.exe"
f = io.open(path, "rb")
f:seek("set", 0)
b = f:read(512)
f:close()
io.write("\"" .. path .. "\" / " .. string.len(b).."Byte Dump...\n")
i = 1
l = ""
repeat
w = string.sub(b, i, i + 15)
for c in string.gmatch(w, ".") do
l = l .. string.format("%02X ", string.unpack("B", c))
end
l = l .. string.rep(" ", 3 * (16 - string.len(w)))
l = l .. " "
l = l .. string.gsub(w, "[^\x20-\x7e]", ".")
l = l .. "\n"
i = i + 16
until string.len(b) + 16 < i
io.write(l)
966:デフォルトの名無しさん
16/07/16 14:41:48.88 ClCwwHut.net
・・・mrubyの方が403で張れないんだけどw
967:デフォルトの名無しさん
16/07/19 21:09:20.86 5Ru68Qww.net
require("hoge");
func=function()end;
と
hoge={
func=function()end
};
の違いって何ですか?
968:デフォルトの名無しさん
16/07/19 22:10:30.90 Uci7C8fw.net
言語が書かれてないけどLuaということにして話を進めると
上
hogeというモジュールを読み込む
funcというグローバル変数に何もしない関数を代入する
下
funcという何もしない関数をもつテーブルを作成しhogeというグローバル変数に代入する
969:デフォルトの名無しさん
16/07/19 22:35:55.44 5Ru68Qww.net
つまりモジュールが読み込まれると、
func=function()end;
hoge={func=func};
をするって事?
970:デフォルトの名無しさん
16/07/19 22:51:15.91 Uci7C8fw.net
require(’module_name’)としたとき何を行うかはその読み込んだモジュールしだい
最近のものはグローバル環境を汚すのを嫌って勝手に代入せずテーブルを返すのが推奨されているから
module=require(’modname’)
って書く
971:デフォルトの名無しさん
16/07/19 22:54:48.00 5Ru68Qww.net
>>957
何となく分かった気がする
ありがとう
972:デフォルトの名無しさん
16/08/02 15:28:41.79 vpqNpIG1.net
継承って
local self=BaseClass.new();
self.hoge=0;
return setmetatable( self, { __index = Class } );
でいいんでしょうか?
色々な方法が書いてあってどれをすればいいか分かりません
973:デフォルトの名無しさん
16/08/02 21:42:21.39 rXn2IC8I.net
>>959
色々な方法があるから、使うフレームワークが推奨する方式に従うべき
特にそういう縛りがなければ自分で考えてみてもいいが
汎用性が高いのはJavaScriptと同じ方式だとは思う
974:デフォルトの名無しさん
16/08/02 22:00:37.77 qJ2YHFft.net
その色々な方法ごとに新しい言語を作るのが普通
一つの言語で色々やってるのは珍しいが効率は良い
975:デフォルトの名無しさん
16/08/03 08:06:53.16 8fjgpLNn.net
効率は悪いだろう? 開発者間で連携もしづらい
まぁLuaだと組み込み環境ごとに全く別の言語だと思ったほうが良いんだろうけど
976:デフォルトの名無しさん
16/08/04 09:23:50.33 Mm46IUtm.net
URLリンク(www.lua.org)
本家に書いてあるやん
977:デフォルトの名無しさん
16/08/04 20:01:15.52 aMt1KCpE.net
>>963
お手本を作ってクローンさせる方式だね
一般的なクラスとインスタンス方式にこだわりがなければLuaらしいやり方だ
978:デフォルトの名無しさん
16/08/05 22:47:51.66 K6ts8EaK.net
継承のやり方は分かりました
ありがとうございます
もう一つあるんですが、動的に引数を指定したり複数の戻り値を返したりすることは出来ますか?
hoge(1,2,3)と通常は呼び出す物をhoge({1,2,3})と呼び出したり、
return 1,2,3;
を
return {1,2,3}
のように配列を使って動的に指定したいです
979:デフォルトの名無しさん
16/08/05 23:10:53.81 K6ts8EaK.net
unpackで出来ました
すみません
980:デフォルトの名無しさん
16/08/26 15:28:57.81 BDiBxktH.net
luaL_requiref(L, ...)
の次にlua_pop(L, 1) を入れるのはなぜですか?
981:デフォルトの名無しさん
16/08/26 17:19:18.70 LCNVy+4G.net
>>967
luaL_requirefはロードしたモジュールをスタックに残すから
それをスタックから取り除いている
LuaのC APIはスタックを意識する必要がある
マニュアルにある [-0, +1, e] のような箇所で説明されている
982:デフォルトの名無しさん
16/08/28 07:51:02.13 O603KyWm.net
>>968
ありがとうございます。
スタックから取り除いても大丈夫(モジュールは使える)ということなのでしょうか?
もしそうならスタックに積まれるのはなぜなのですか?
983:デフォルトの名無しさん
16/08/28 14:07:28.83 A/8rNEYu.net
>>969
Luaの疑似コードだと
local m = require("module")
m = nil
のような動作だと考えてくれ。
moduleが何かを返すタイプならスタックに積まれた m を使うことになるだろうし
グローバル変数を追加するタイプなら取り除いても(グローバル経由で)使えるだろう。
984:デフォルトの名無しさん
16/08/29 18:22:57.78 9ixLGi86.net
>>970
よく分かりました。ありがとうございました。
985:デフォルトの名無しさん
16/09/08 18:19:09.71 GHpvw+VU.net
少しスレタイとは離れるかもしれないんだけど、開発環境について教えて欲しい
今まではメモ帳(付属のじゃないよ)だけで一つか複数のファイル開いてシコシコ書いてたんだけど、
数百から千くらいのファイル群のゲームの解析というか関数なんかの検索に、メモ帳では太刀打ちできなくて困ってます
出来たら沢山開けるメモ帳的な簡易的な物が良いんだけど、OSにインスコして、関連付けもしてくれちゃって・・・っていうのはむしろ要らない、アーカイブ展開したらすぐ使えるのがいいです
よろしくお願いします。
986:デフォルトの名無しさん
16/09/08 18:46:36.03 2gFs3OWY.net
VSCodeおすすめ
OS非依存だからwin以外でも使える
987:デフォルトの名無しさん
16/09/08 19:45:27.86 oP5NpzJh.net
Atom.io
988:デフォルトの名無しさん
16/09/08 21:07:48.97 GHpvw+VU.net
即レスありがとうございます。試してみます
989:デフォルトの名無しさん
16/09/09 21:43:20.24 ++lP9HIx.net
Luaで書かれたPHPインタプリタってないかな
990:デフォルトの名無しさん
16/09/10 00:03:26.44 mCfQwN8m.net
なんでそんな無駄なことするの
991:デフォルトの名無しさん
16/09/10 01:31:15.83 1lwBEIiL.net
>>977
FlashAirでPHPを実行できないかなーとか考えた
992:デフォルトの名無しさん
16/09/10 06:33:19.86 URrhv4S0.net
ライブラリの比重が大きな言語に対して構文解釈だけができても嬉しくない
993:デフォルトの名無しさん
16/09/10 09:08:02.15 CKZv9HiE.net
あってもFlashAirは内部メモリが小さいから無理っぽい
994:デフォルトの名無しさん
16/09/10 10:14:04.84 32Nzsdc+.net
FlashAirってLua動かせるのかよ
995:デフォルトの名無しさん
16/09/10 13:14:30.12 1lwBEIiL.net
>>980
そうか、残念
>>981
最新モデルのW-03のみだけどLuaインタプリタを内蔵している
FlashAir Developers - APIガイド - Lua機能
URLリンク(flashair-developers.com)
FlashAirのプログラミングにも使えるしCGIとしても使える
996:デフォルトの名無しさん
16/09/10 13:27:13.60 32Nzsdc+.net
>>982
ただのPCに転送できるSDカードと思ってたわ
よくあのサイズで内臓出来たな…技術凄い
997:デフォルトの名無しさん
16/09/10 13:51:44.5
998:9 ID:1lwBEIiL.net
999:デフォルトの名無しさん
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:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています