プログラミング言語 Lua その3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/10/14(土) 13:13:52前々スレ http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
前スレ http://pc8.2ch.net/test/read.cgi/tech/1063711237/
本家 http://www.lua.org/
lua-users http://lua-users.org/
LuaForge http://luaforge.net/
Lua 5.1 リファレンスマニュアル(日本語訳)
http://sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html
0446デフォルトの名無しさん
2007/08/23(木) 00:18:17その辺をちょっと書き足しました
0447デフォルトの名無しさん
2007/08/23(木) 00:53:40delegateの使い方が無茶苦茶だよ
threadあたりは突込みどころが多すぎてもう
0448デフォルトの名無しさん
2007/08/23(木) 11:11:51速度に関しては確かにはっきりと言えることじゃないですね
delegateは非常駐っぽいことをやる方法がこれしか思いつかなかったので…
突っ込みどころあるなら具体的に言ってもらえると助かります。個人的にそれを期待して書いてみたというのもあるので
0449デフォルトの名無しさん
2007/08/23(木) 11:27:580450デフォルトの名無しさん
2007/08/23(木) 23:20:45としかリアクションが思い浮かばない
0451デフォルトの名無しさん
2007/08/23(木) 23:25:17ナシって、
>その使い方ならゲームでも大丈夫でしょうが、
>スクリプトでガリガリ計算を行うようだと速度面で問題になってくると思います。
この部分か?他に見当たらないが。
これは当然の話で、裏づけも糞もないだろ、と思う。
0452デフォルトの名無しさん
2007/08/23(木) 23:43:10実際のデータがなかったら何も言っていないのといっしょだよこういう話は
0453デフォルトの名無しさん
2007/08/23(木) 23:47:00はいはい。お前は口を出すとマイナスにしかならないから黙っててねこういう話は
0454デフォルトの名無しさん
2007/08/24(金) 00:13:42>>452が何をいってるのかちゃんと理解できてるか?
キレてるのだけはわかるんだが
黙ってろとかどんだけだよ
0455デフォルトの名無しさん
2007/08/24(金) 00:20:080456デフォルトの名無しさん
2007/08/24(金) 01:25:58Squirrelのことだったらまだしもそれ以前に用語の使い方がおかしかったりとか
そういう指摘もあるだろうなあ、と
それはもう未熟っぷりを晒す覚悟でしたのでいいのですが、
Squirrelに関する間違いはここで出して欲しいです。それをまとめたいので。
特に>>448さんのdelegateに関しては具体的に理由を聞きたいです
常駐、非常駐的なことをするのって他に方法あるんですかね?
個人的にそこら辺は死活問題なんですよね
0457デフォルトの名無しさん
2007/08/24(金) 01:26:540458デフォルトの名無しさん
2007/08/24(金) 01:46:54最初から真面目にやろうとしてないじゃん。
スレは荒れるし、入門者が間違った知識覚える恐れもあるし、
やる気無いんだったら別にやらなくていいから、変なこと書かないでくれ。
0459デフォルトの名無しさん
2007/08/24(金) 01:48:57なにキレてんの?
0460デフォルトの名無しさん
2007/08/24(金) 01:50:07間違いを指摘するやる気もないなら、お前が黙ってろって話だと思うよ
0461デフォルトの名無しさん
2007/08/24(金) 01:54:45黙ってろとかどんだけだよ
>>458
書かないでくれとかどんだけだよ
どおおおんだけええええええ
0462デフォルトの名無しさん
2007/08/24(金) 02:04:020463デフォルトの名無しさん
2007/08/24(金) 02:13:18どんだけ〜言われたのが相当気に障ったのか相当気に入ったのか知らないけど
書きたいだけならどっか他のとこで発散してきてくれると助かる
0464デフォルトの名無しさん
2007/08/24(金) 02:28:00luaってそういう言語だったっけ
複数手前のスクリプトのステートメントを参照できる変数があって
それを一部書き換えてevalできるとか
すごいプログラムがかけそうだが
0465デフォルトの名無しさん
2007/08/24(金) 02:47:24キレてんのはお前だろ。どっかいってね。
0466デフォルトの名無しさん
2007/08/24(金) 03:49:14常駐、非常駐的なことってのがよくわからないんだけど
いらなくなったら消すテーブルの名前をあらかじめ決めておいて
スクリプトの中でいらなくなったら消すものはそのテーブル内に定義しておいて
そのテーブルをいらなくなったら消す
じゃだめなの?
0467デフォルトの名無しさん
2007/08/24(金) 07:54:030468デフォルトの名無しさん
2007/08/24(金) 17:56:15リファレンスにある関数登録みたいなやり方でテーブルを登録するってことですか
そうかー、普通そうするのか
0469デフォルトの名無しさん
2007/08/24(金) 18:07:590470デフォルトの名無しさん
2007/08/25(土) 00:12:03どうも納得されてるみたいだけど
常駐、非常駐的なことってのが未だに謎なので少し説明してよ
>リファレンスにある関数登録みたいなやり方
ってどこのこと?
あまりにニッチな要求に応えなくちゃならんならスクリプトでどうにかしようとするより
squirrelのソースコードいじるほうが利口な場合もあるかもしれないよ?
0471デフォルトの名無しさん
2007/08/25(土) 00:41:37いるものは残して、いらないものは消す。おっしゃってる通りのことをやりたいだけです。
ルートテーブルに全部のスクリプト読み込んでたら、そういう区別ができないじゃないですか
>>リファレンスにある関数登録みたいなやり方
>ってどこのこと?
SQFUNCTION型の関数をルートテーブルに登録するやつみたいなやり方…、じゃないんですか?
0472デフォルトの名無しさん
2007/08/25(土) 01:46:07APIでやるならそのとおり
↓みたいなスクリプトをルートテーブルをpushしたあとdofileしちゃってもいいし
tmptable <-
{
a = function(v) { return v + 1; },
v1 = 0,
v2 = 3.1415
};
0473デフォルトの名無しさん
2007/08/27(月) 11:16:30166はコンパイラを削ってつかっている予感
常駐の意味がよくわからないけど、
がんばって使ってる感がいいね
0474デフォルトの名無しさん
2007/08/29(水) 22:09:09http://www.codeplex.com/Nua
0475デフォルトの名無しさん
2007/08/29(水) 23:09:000476デフォルトの名無しさん
2007/08/30(木) 01:12:360477デフォルトの名無しさん
2007/08/30(木) 01:22:530478デフォルトの名無しさん
2007/08/30(木) 20:47:360479デフォルトの名無しさん
2007/09/01(土) 13:13:08Squirrel - Lua/組み込み系言語 Wiki*
http://wikiwiki.jp/lua/?Squirrel
こっちにもないんだけど・・・roz
0480デフォルトの名無しさん
2007/09/01(土) 13:18:28そういうこと考えないのか?
0481デフォルトの名無しさん
2007/09/01(土) 13:41:26お!はてなのやる気のないゲームプログラマさんのページか!
dクスだぜ
じっくりよむぜ
0482デフォルトの名無しさん
2007/09/02(日) 21:09:16lua_State *L = lua_open();
int* hoge = new int;
lua_register(L, "hoge", hogehoge);
luaL_dofile( L, "hoge.lua");
この時、関数hogehoge内で変数hogeをいじりたいのですが、
どうすればいいのでしょうか?
グローバルに置くとかしか解決方法がないのならあきらめますが…
0483デフォルトの名無しさん
2007/09/03(月) 16:01:58思ったんですが、そのやり方で登録した関数はスクリプト側から呼び出せないんじゃないでしょうか
0484デフォルトの名無しさん
2007/09/04(火) 11:57:00その関数に変数の参照を渡す必要があります。
たぶんテーブルで囲んであげればいいです。Lua のコードで書くとこんな感じ。
function hogehoge(box)
box[1] = 456
end
local hoge = {123}
hogehoge(hoge) -- ここで hoge の内容が変わる
0485デフォルトの名無しさん
2007/09/04(火) 15:04:00http://www.eonclash.com/ViewProduct.php?ProductID=24
0486デフォルトの名無しさん
2007/09/04(火) 19:15:48DelphiとFPCをサポートしてる?
0487デフォルトの名無しさん
2007/09/04(火) 20:50:51lua_register(L, "hoge", hogehoge);
を
lua_pushlightuserdata(L, static_cast<void*>(hoge));
lua_pushcclosure(L, hogehoge, 1);
lua_setglobal(L, "hoge");
に変えればいんじゃね?
hogehogeの中身は
int hogehoge(lua_State *L)
{
int* hoge = static_cast<int*>(lua_touserdata(L, lua_upvalueindex(1)));
// hogeを使っていろいろ
}
あと、hogeはどこでdeleteするの?
delete後にhogehogeを呼ばれたらアウト
0488デフォルトの名無しさん
2007/09/11(火) 02:21:22object.hpp:256 ---------
template<class LHS, class RHS>
typename enable_binary<bool,LHS,RHS>::type
operator!=(LHS const& lhs, RHS const& rhs)
{
return !(lhs < rhs); // '<' => '==' の間違い?
}
---------
luabinder の意見求む!!
0489デフォルトの名無しさん
2007/09/18(火) 15:27:050490デフォルトの名無しさん
2007/09/18(火) 23:28:090491デフォルトの名無しさん
2007/09/19(水) 21:23:460492デフォルトの名無しさん
2007/09/22(土) 20:39:470493デフォルトの名無しさん
2007/09/23(日) 19:05:000494デフォルトの名無しさん
2007/09/24(月) 00:30:350495デフォルトの名無しさん
2007/09/24(月) 00:37:35ぅあ
0496デフォルトの名無しさん
2007/09/28(金) 17:42:45∞ ぅゎ ょぅι゛ょ っょぃ
┃( '-') 、(;´д`)
┣ノ、 )= 三 )n ) Σ
〉 / / <
0497デフォルトの名無しさん
2007/10/14(日) 12:47:04C言語として
=> lua_gettable等がlongjmpかますので
C++と一緒に使うのは相当つらい。
C++言語として
=> 上記問題は解決する(longjmpでは無く
throwつかうから)がluaとリンクするプログラム
は全てC++でコンパイルする羽目になる
C++言語として&LUA_APIをextern "C"として宣言
=> 割合ましだが、相変わらずLuaとリンクする
プログラムは-fexceptions等をつけてコンパイル
する必要あり。
意見よろ
0498デフォルトの名無しさん
2007/10/14(日) 13:27:270499デフォルトの名無しさん
2007/10/14(日) 14:09:07>C++言語として&LUA_APIをextern "C"として宣言
Cのライブラリを使う予定がない場合はextern "C"無しでもいいかも。
LuaのソースコードがそのままC++でコンパイルできると知った時はちょっと感動したもんだ。
0500497
2007/10/14(日) 14:43:32やっぱそれが妥当ですかねぇ。
ただ、Cのライブラリ使う場合Cのライブラリを-fexceptions付き
でコンパイルしないといけないので(lua->Cライブラリ->luaが起こる
場合)、ソースが手に入ることが前提になるんだよね。
linux&gccな環境でソースが手に入らないことはまれだろうけど。
0501デフォルトの名無しさん
2007/10/14(日) 15:38:22何が変わるの?
0502497
2007/10/14(日) 16:26:57えーっと、gccの話ね。(VCにも似たオプションがあったはず)
関数呼び出しが”C++<1:try> => C<2> => C++<3:throw>” となる場合
<2>の部分のスタックをまき戻す為の情報を付加しているんだと
思う。自信ないけど。
これが無いと例外発生時にAbortしてしまう。
>>499の例で言うと、
lua(C++) => C言語ライブラリ => lua_gettable(...)
なんて場合、lua_gettable内で発生した例外が
C言語ライブラリ内を通ることになる。
0503デフォルトの名無しさん
2007/10/14(日) 16:57:07つけてもつけなくても素通りするだけで変わらないと思ってたけど、
つけないと abort しちゃうのか。
http://gcc.gnu.org/onlinedocs/gcc-4.2.2/gcc/Code-Gen-Options.html
-fexceptions
"... However, you may need to enable this option when compiling C code that needs to interoperate properly with exception handlers written in C++. ..."
なんかぼかして書いてあるけど、そういうことね。
ありがと。
0504デフォルトの名無しさん
2007/10/24(水) 19:54:400505デフォルトの名無しさん
2007/10/27(土) 13:51:35しC++側からその関数を呼び出すとlua_pcallのところで失敗します。きちん
とluaopen_math()なども呼び出しているのですが・・・
同じ経験がある人とかいませんか?
0506デフォルトの名無しさん
2007/10/27(土) 16:48:44lua_pcallの戻り値とエラーメッセージは?
それを確認すると解決の糸口が見つかると思う。
0507デフォルトの名無しさん
2007/10/27(土) 17:29:12スタックからpopするところでエラーが出ていました。引数はきちんと
スタックにつんでいるので問題ないと思うんですが・・・
標準ライブラリを使わない関数とかは普通に実行できるんで、全く理由が
分かりません。
0508デフォルトの名無しさん
2007/10/27(土) 17:55:590509507
2007/10/27(土) 18:26:57lua_getglobal(m_L, "hoge");
lua_pcall(m_L, 0, 1, 0); //ここでエラー
int ret = static_cast<int>(lua_tonumber(m_L, -1));
//luaファイルで定義した関数
function hoge
return math.random(100);
end
luaL_loadfile()は呼び出し済みです。
0511デフォルトの名無しさん
2007/10/27(土) 19:52:02luaopen_math呼んで無いじゃん。
呼んでる部分を含めた再現ソースを見せなさい。
0512507
2007/10/27(土) 22:31:55スタックトップのエラーメッセージを調べたら引数が足りないというエラー
でした。マニュアルにはmath.randomの定義は以下のように書いてあったので
普通に通るもんだと思っていたんですが・・・
「引数無しで呼ばれると、math.random は [0,1) の範囲の実数の疑似乱数を
返す。数値 n を渡すと、math.random は [1,n] の範囲の整数の疑似乱数を
返す。 2つの引数 l と u を渡して呼んだときは、 math.random は [l,u]
の範囲の整数の疑似乱数を返す。」
引数を2個で渡すとエラーは出なくなったんですが、常に0が返ってきます。
引数0個だと正常に動作します。何なんでしょうね。
>>511
luaopen_mathは呼んでいます。
0513デフォルトの名無しさん
2007/10/27(土) 23:22:03再現する最小限のソースを全て晒したら?
省略する奴に限って、省略したところに問題があるのはよくある話だから。
0514デフォルトの名無しさん
2007/11/02(金) 01:34:460515デフォルトの名無しさん
2007/11/02(金) 03:54:430516デフォルトの名無しさん
2007/11/02(金) 04:49:280517デフォルトの名無しさん
2007/11/02(金) 08:13:59LLでしょTJS2って
0518デフォルトの名無しさん
2007/11/02(金) 08:19:06http://eonclash.com/ViewProduct.php?ProductID=26
0519デフォルトの名無しさん
2007/11/02(金) 15:32:46スレタイ嫁
ここはLL全般じゃなくてぅあのスレだ。
つっても過疎ってるから俺は構わないけど。
0520デフォルトの名無しさん
2007/11/02(金) 18:55:19List[2]={"name","addr","phone"}
List[n]={"name","addr","phone"}
このような記述のList.luaがあるとして、これをrequireした後に書き出しすると、
List[4]={"name","addr","phone"}
List[1]={"name","addr","phone"}
List[3]={"name","addr","phone"}
List[2]={"name","addr","phone"}
のように、順序が崩れてしまいます。
テーブルのソートとはどのように行うのでしょうか?
0521デフォルトの名無しさん
2007/11/02(金) 19:04:321から始まる数値キーなら
for i,v in ipairs(List) do ... end
で回せばキーの順序はずれないと思うんだけどな。
実際ソートするならこれだけど。
table.sort(table, function(a,b) return a.x < b.x end)
みたいな。
ただこれでソートするにしても、テーブルは配列状(キーは1から始まる数値)である必要がある。
0522デフォルトの名無しさん
2007/11/02(金) 19:07:27ありがとうございます。
現在のところ、
List[2]={"name","addr","phone"}
List[3]={"name","addr","phone"}
List[n]={"name","addr","phone"}
などのように1から始まる保証は無く、かつ数値が2, 3, 5, 6, 8, ...のように
飛び番になる可能性もあります。
実際のところ、処理上は問題は出ないのですが、
ログを取った際の可読性の問題でソート可能であればしたいのです。
0523デフォルトの名無しさん
2007/11/02(金) 19:22:39Listとは別に、
sort_table[1]={no=5,"name","addr","phone"}
sort_table[2]={no=1,"name","addr","phone"}
sort_table[3]={no=13,"name","addr","phone"}
....
って形に詰めなおして>>521みたいにnoでソートすればおk
0524デフォルトの名無しさん
2007/11/02(金) 23:05:56前スレ嫁。ここはLL全般のスレだ。
お前が構おうが構うまいがな。
0525デフォルトの名無しさん
2007/11/02(金) 23:27:58お前が構おうが構うまいがここはスレタイ通りLuaのスレだ。
ここが何のスレかを知るのになぜ前スレを読む必要がある?
LL全般について議論したいのならお前がLLスレを立てればいいだけのこと。
0526デフォルトの名無しさん
2007/11/02(金) 23:45:50前スレみるまでもなく>>8-11辺りでわかるんじゃ?
スレも半分超えてるのになんで今更突然……。
0527デフォルトの名無しさん
2007/11/03(土) 01:00:15LL一般扱ってたらスレがいくらあっても足りないぜ
0528デフォルトの名無しさん
2007/11/03(土) 05:06:28はいはい、新参が知ったかすんな。
>>527
何が一杯一杯なの?
つうか、お前過疎ってるから構わないって言った癖に意味不明すぎんな。
0529デフォルトの名無しさん
2007/11/03(土) 08:40:49次スレ(いつになるかわからんけど)のスレタイは変えたほうが良いかもね。
0530デフォルトの名無しさん
2007/11/03(土) 08:48:29勝手に連立政権にされちゃ迷惑だ。
0531デフォルトの名無しさん
2007/11/03(土) 10:53:29LL特集になぜかLuaは入れてもらえないことが多いんだこれが
0532デフォルトの名無しさん
2007/11/03(土) 11:07:19Webサーバとの組み合わせを指向してないからかな?
0533デフォルトの名無しさん
2007/11/03(土) 11:28:57違う。
組み込み言語全般のスレ。
過去ログ嫁
スレタイは、前回、組み込み言語にしろって言ったのに、
Luaだけにしやがっただけで
0534デフォルトの名無しさん
2007/11/03(土) 11:35:560535デフォルトの名無しさん
2007/11/03(土) 11:39:37ワロタw
まさしくその通りw
0536デフォルトの名無しさん
2007/11/03(土) 11:59:15そうですw
0537デフォルトの名無しさん
2007/11/03(土) 12:51:30このスレ用のwikiもURLはluaだけど、LLならOKってなってるでしょ。
http://wikiwiki.jp/lua/
「情報が錯綜する」ってバカですか。
錯綜するほど情報が出てないでしょ。
むしろ組み込み言語の情報が集まった方がいい。
>>534=535=536
そうじゃない。前スレではLL全般ということで同意がとれていていた。
0538デフォルトの名無しさん
2007/11/03(土) 12:55:10そんなに煽りに反応しなくて良いよ。
0539デフォルトの名無しさん
2007/11/03(土) 12:56:14なんだかんだでスレタイは変わらなかったんだよ。
前スレDAT落ちしてる上に、1年以上も前の話だから、
忘れてる人も多いだろうし、最近来た人が知らないのはしょうがない。
0540デフォルトの名無しさん
2007/11/03(土) 12:56:41てか、ここ一年未満の新参が増えて、古参はluaをもう見放したのか?
0541デフォルトの名無しさん
2007/11/03(土) 13:13:340542デフォルトの名無しさん
2007/11/03(土) 15:21:49ノシ 前スレからいます。
テンプレがあまり良くないよね。
前スレの終り頃はゴタゴタしてて急だったから立ててくれた人を責められないけど。
人も集まってるみたいだしテンプレを考えるにはいい機会かも。
できたら>11のWikiに書いておくと。
0543デフォルトの名無しさん
2007/11/04(日) 21:18:36民主主義は多数決で決まるんだよ、ばかがw
0544デフォルトの名無しさん
2007/11/04(日) 22:29:070545デフォルトの名無しさん
2007/11/04(日) 23:50:22このLL全般でやってる現在でさえスローペースなんだよ? 全然意味がわからない。
■ このスレッドは過去ログ倉庫に格納されています