トップページtech
1001コメント297KB

プログラミング言語 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
0449デフォルトの名無しさん2007/08/23(木) 11:27:58
俺も期待してる
0450デフォルトの名無しさん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
>>452
はいはい。お前は口を出すとマイナスにしかならないから黙っててねこういう話は
0454デフォルトの名無しさん2007/08/24(金) 00:13:42
>>453
>>452が何をいってるのかちゃんと理解できてるか?
キレてるのだけはわかるんだが
黙ってろとかどんだけだよ
0455デフォルトの名無しさん2007/08/24(金) 00:20:08
どおおおんだけええええええ
0456デフォルトの名無しさん2007/08/24(金) 01:25:58
まあいろいろと突っ込まれるのは覚悟してました
Squirrelのことだったらまだしもそれ以前に用語の使い方がおかしかったりとか
そういう指摘もあるだろうなあ、と
それはもう未熟っぷりを晒す覚悟でしたのでいいのですが、
Squirrelに関する間違いはここで出して欲しいです。それをまとめたいので。
特に>>448さんのdelegateに関しては具体的に理由を聞きたいです
常駐、非常駐的なことをするのって他に方法あるんですかね?
個人的にそこら辺は死活問題なんですよね
0457デフォルトの名無しさん2007/08/24(金) 01:26:54
安価447だったw
0458デフォルトの名無しさん2007/08/24(金) 01:46:54
つーかめんどくさいとか、投げやりとか書いてるし、
最初から真面目にやろうとしてないじゃん。

スレは荒れるし、入門者が間違った知識覚える恐れもあるし、
やる気無いんだったら別にやらなくていいから、変なこと書かないでくれ。
0459デフォルトの名無しさん2007/08/24(金) 01:48:57
>>454
なにキレてんの?
0460デフォルトの名無しさん2007/08/24(金) 01:50:07
>>458
間違いを指摘するやる気もないなら、お前が黙ってろって話だと思うよ
0461デフォルトの名無しさん2007/08/24(金) 01:54:45
>>460
黙ってろとかどんだけだよ

>>458
書かないでくれとかどんだけだよ

どおおおんだけええええええ
0462デフォルトの名無しさん2007/08/24(金) 02:04:02
どんだけとかどんだけだよ
0463デフォルトの名無しさん2007/08/24(金) 02:13:18
>>461
どんだけ〜言われたのが相当気に障ったのか相当気に入ったのか知らないけど
書きたいだけならどっか他のとこで発散してきてくれると助かる
0464デフォルトの名無しさん2007/08/24(金) 02:28:00
このスレ定期的に小学生の口ゲンカみたいなやりとりがあるけど
luaってそういう言語だったっけ
複数手前のスクリプトのステートメントを参照できる変数があって
それを一部書き換えてevalできるとか
すごいプログラムがかけそうだが
0465デフォルトの名無しさん2007/08/24(金) 02:47:24
>>463
キレてんのはお前だろ。どっかいってね。
0466デフォルトの名無しさん2007/08/24(金) 03:49:14
>>456
常駐、非常駐的なことってのがよくわからないんだけど
いらなくなったら消すテーブルの名前をあらかじめ決めておいて
スクリプトの中でいらなくなったら消すものはそのテーブル内に定義しておいて
そのテーブルをいらなくなったら消す
じゃだめなの?
0467デフォルトの名無しさん2007/08/24(金) 07:54:03
オブジェクト指向のスクリプト言語が遅いのはほぼ定説だと思うが
0468デフォルトの名無しさん2007/08/24(金) 17:56:15
>>466
リファレンスにある関数登録みたいなやり方でテーブルを登録するってことですか

そうかー、普通そうするのか
0469デフォルトの名無しさん2007/08/24(金) 18:07:59
でもそれって、GCやrefcountを阻害するだけじゃない?
0470デフォルトの名無しさん2007/08/25(土) 00:12:03
>>468
どうも納得されてるみたいだけど
常駐、非常駐的なことってのが未だに謎なので少し説明してよ
>リファレンスにある関数登録みたいなやり方
ってどこのこと?

あまりにニッチな要求に応えなくちゃならんならスクリプトでどうにかしようとするより
squirrelのソースコードいじるほうが利口な場合もあるかもしれないよ?
0471デフォルトの名無しさん2007/08/25(土) 00:41:37
>いらなくなったら消す
いるものは残して、いらないものは消す。おっしゃってる通りのことをやりたいだけです。
ルートテーブルに全部のスクリプト読み込んでたら、そういう区別ができないじゃないですか

>>リファレンスにある関数登録みたいなやり方
>ってどこのこと?
SQFUNCTION型の関数をルートテーブルに登録するやつみたいなやり方…、じゃないんですか?
0472デフォルトの名無しさん2007/08/25(土) 01:46:07
>>471
APIでやるならそのとおり

↓みたいなスクリプトをルートテーブルをpushしたあとdofileしちゃってもいいし
tmptable <-
{
 a = function(v) { return v + 1; },
 v1 = 0,
 v2 = 3.1415
};
0473デフォルトの名無しさん2007/08/27(月) 11:16:30
>>472
166はコンパイラを削ってつかっている予感

常駐の意味がよくわからないけど、
がんばって使ってる感がいいね
0474デフォルトの名無しさん2007/08/29(水) 22:09:09
IronLua じゃなくて Nua かよ(w
http://www.codeplex.com/Nua
0475デフォルトの名無しさん2007/08/29(水) 23:09:00
ぬあ?
0476デフォルトの名無しさん2007/08/30(木) 01:12:36
あえて外人っぽく発音すればヌワだが
0477デフォルトの名無しさん2007/08/30(木) 01:22:53
にょわーっ
0478デフォルトの名無しさん2007/08/30(木) 20:47:36
Nuaで検索するとFate系ばっかだな
0479デフォルトの名無しさん2007/09/01(土) 13:13:08
>>166さんの文章ってどこ?

Squirrel - Lua/組み込み系言語 Wiki*
http://wikiwiki.jp/lua/?Squirrel

こっちにもないんだけど・・・roz
0480デフォルトの名無しさん2007/09/01(土) 13:18:28
とりあえず張られてるリンクを探してみるとか
そういうこと考えないのか?
0481デフォルトの名無しさん2007/09/01(土) 13:41:26
>>480
お!はてなのやる気のないゲームプログラマさんのページか!
dクスだぜ
じっくりよむぜ
0482デフォルトの名無しさん2007/09/02(日) 21:09:16
質問

lua_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
>>466
思ったんですが、そのやり方で登録した関数はスクリプト側から呼び出せないんじゃないでしょうか
0484デフォルトの名無しさん2007/09/04(火) 11:57:00
API はまだよく知らないんですが、ローカル変数をほかの関数からいじるには、
その関数に変数の参照を渡す必要があります。
たぶんテーブルで囲んであげればいいです。Lua のコードで書くとこんな感じ。

function hogehoge(box)
box[1] = 456
end

local hoge = {123}
hogehoge(hoge) -- ここで hoge の内容が変わる
0485デフォルトの名無しさん2007/09/04(火) 15:04:00
Generic Pascal Lua Library
http://www.eonclash.com/ViewProduct.php?ProductID=24
0486デフォルトの名無しさん2007/09/04(火) 19:15:48
>>485
DelphiとFPCをサポートしてる?
0487デフォルトの名無しさん2007/09/04(火) 20:50:51
>>482
lua_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:22
luabindのこれってバグ?

object.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:05
age
0490デフォルトの名無しさん2007/09/18(火) 23:28:09
ぅあ
0491デフォルトの名無しさん2007/09/19(水) 21:23:46
ぅあ
0492デフォルトの名無しさん2007/09/22(土) 20:39:47
ょゅぅょゅぅ
0493デフォルトの名無しさん2007/09/23(日) 19:05:00
|ナ|ナ|ナ
0494デフォルトの名無しさん2007/09/24(月) 00:30:35
っょぃっょぃ
0495デフォルトの名無しさん2007/09/24(月) 00:37:35
ょゎぃょゎぃ

ぅあ
0496デフォルトの名無しさん2007/09/28(金) 17:42:45
   ドゴォォォ
    ∞        ぅゎ ょぅι゛ょ っょぃ
   ┃( '-')  、(;´д`) 
   ┣ノ、 )= 三 )n ) Σ   
      〉  / / <  
0497デフォルトの名無しさん2007/10/14(日) 12:47:04
皆さんLuaインタプリタを何でコンパイルしてる?

C言語として
=> lua_gettable等がlongjmpかますので
  C++と一緒に使うのは相当つらい。

C++言語として
=> 上記問題は解決する(longjmpでは無く
  throwつかうから)がluaとリンクするプログラム
  は全てC++でコンパイルする羽目になる

C++言語として&LUA_APIをextern "C"として宣言
=> 割合ましだが、相変わらずLuaとリンクする
  プログラムは-fexceptions等をつけてコンパイル
  する必要あり。

意見よろ
0498デフォルトの名無しさん2007/10/14(日) 13:27:27
つDLL
0499デフォルトの名無しさん2007/10/14(日) 14:09:07
俺は
>C++言語として&LUA_APIをextern "C"として宣言

Cのライブラリを使う予定がない場合はextern "C"無しでもいいかも。
LuaのソースコードがそのままC++でコンパイルできると知った時はちょっと感動したもんだ。
05004972007/10/14(日) 14:43:32
>>499
やっぱそれが妥当ですかねぇ。

ただ、Cのライブラリ使う場合Cのライブラリを-fexceptions付き
でコンパイルしないといけないので(lua->Cライブラリ->luaが起こる
場合)、ソースが手に入ることが前提になるんだよね。
linux&gccな環境でソースが手に入らないことはまれだろうけど。
0501デフォルトの名無しさん2007/10/14(日) 15:38:22
そもそもCには例外処理が言語に組み込まれてないんだけど、 -fexception つけると
何が変わるの?
05024972007/10/14(日) 16:26:57
>>501
えーっと、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
>>502
つけてもつけなくても素通りするだけで変わらないと思ってたけど、
つけないと 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:40
hoshu
0505デフォルトの名無しさん2007/10/27(土) 13:51:35
luaファイルで標準ライブラリの関数(math.randomとか)を使った関数を定義
しC++側からその関数を呼び出すとlua_pcallのところで失敗します。きちん
とluaopen_math()なども呼び出しているのですが・・・
同じ経験がある人とかいませんか?
0506デフォルトの名無しさん2007/10/27(土) 16:48:44
>>505
lua_pcallの戻り値とエラーメッセージは?
それを確認すると解決の糸口が見つかると思う。
0507デフォルトの名無しさん2007/10/27(土) 17:29:12
lua_pcallの戻り値は2なんで実行時エラーの模様です。デバッガで追ってみると
スタックからpopするところでエラーが出ていました。引数はきちんと
スタックにつんでいるので問題ないと思うんですが・・・
標準ライブラリを使わない関数とかは普通に実行できるんで、全く理由が
分かりません。
0508デフォルトの名無しさん2007/10/27(土) 17:55:59
再現するソースを見せるんだ
05095072007/10/27(土) 18:26:57
//関数呼び出し部分
lua_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()は呼び出し済みです。
05105062007/10/27(土) 19:03:01
>>507
戻り値が0以外の時は文字列型のエラーメッセージが
スタックのトップに置かれているからそれを見れ。
0511デフォルトの名無しさん2007/10/27(土) 19:52:02
>>509
luaopen_math呼んで無いじゃん。
呼んでる部分を含めた再現ソースを見せなさい。
05125072007/10/27(土) 22:31:55
>>510
スタックトップのエラーメッセージを調べたら引数が足りないというエラー
でした。マニュアルには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
>>512
再現する最小限のソースを全て晒したら?
省略する奴に限って、省略したところに問題があるのはよくある話だから。
0514デフォルトの名無しさん2007/11/02(金) 01:34:46
ミニマムコードを上げろー
0515デフォルトの名無しさん2007/11/02(金) 03:54:43
このスレ的にはTJS2の組み込みってどうなの?
0516デフォルトの名無しさん2007/11/02(金) 04:49:28
スレ違い
0517デフォルトの名無しさん2007/11/02(金) 08:13:59
え?べつにいいんじゃないの
LLでしょTJS2って
0518デフォルトの名無しさん2007/11/02(金) 08:19:06
pLua (Lua wrapper for FPC, Lazarus, and Delphi)
http://eonclash.com/ViewProduct.php?ProductID=26
0519デフォルトの名無しさん2007/11/02(金) 15:32:46
>>517
スレタイ嫁
ここはLL全般じゃなくてぅあのスレだ。

つっても過疎ってるから俺は構わないけど。
0520デフォルトの名無しさん2007/11/02(金) 18:55:19
List[1]={"name","addr","phone"}
List[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:32
>>520
1から始まる数値キーなら
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
>>521
ありがとうございます。

現在のところ、

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:39
>>522

Listとは別に、

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
>>519
前スレ嫁。ここはLL全般のスレだ。

お前が構おうが構うまいがな。
0525デフォルトの名無しさん2007/11/02(金) 23:27:58
>>524
お前が構おうが構うまいがここはスレタイ通りLuaのスレだ。
ここが何のスレかを知るのになぜ前スレを読む必要がある?

LL全般について議論したいのならお前がLLスレを立てればいいだけのこと。
0526デフォルトの名無しさん2007/11/02(金) 23:45:50
>>524-525
前スレみるまでもなく>>8-11辺りでわかるんじゃ?
スレも半分超えてるのになんで今更突然……。
0527デフォルトの名無しさん2007/11/03(土) 01:00:15
ぅあだけでもいっぱいいっぱいなのに
LL一般扱ってたらスレがいくらあっても足りないぜ
0528デフォルトの名無しさん2007/11/03(土) 05:06:28
>>525
はいはい、新参が知ったかすんな。


>>527
何が一杯一杯なの?

つうか、お前過疎ってるから構わないって言った癖に意味不明すぎんな。
0529デフォルトの名無しさん2007/11/03(土) 08:40:49
1年経で500レス程度だからLL全般スレでも良さげだな。
次スレ(いつになるかわからんけど)のスレタイは変えたほうが良いかもね。
0530デフォルトの名無しさん2007/11/03(土) 08:48:29
情報が錯綜するからLuaがらみの話題だけでいいよ。
勝手に連立政権にされちゃ迷惑だ。
0531デフォルトの名無しさん2007/11/03(土) 10:53:29
せいぜい Luaとその仲間 ぐらいかな。

LL特集になぜかLuaは入れてもらえないことが多いんだこれが
0532デフォルトの名無しさん2007/11/03(土) 11:07:19
なんでだろう?
Webサーバとの組み合わせを指向してないからかな?
0533デフォルトの名無しさん2007/11/03(土) 11:28:57
>>519
違う。
組み込み言語全般のスレ。
過去ログ嫁

スレタイは、前回、組み込み言語にしろって言ったのに、
Luaだけにしやがっただけで
0534デフォルトの名無しさん2007/11/03(土) 11:35:56
「俺様はそうしろと言ったのに無視しやがって」
0535デフォルトの名無しさん2007/11/03(土) 11:39:37
>>534
ワロタw
まさしくその通りw
0536デフォルトの名無しさん2007/11/03(土) 11:59:15
>>534
そうですw
0537デフォルトの名無しさん2007/11/03(土) 12:51:30
前スレでもLuaの話題なんてたいしてなかったんで、LL系の話題は全般取り扱うことになったの。
このスレ用のwikiもURLはluaだけど、LLならOKってなってるでしょ。
http://wikiwiki.jp/lua/


「情報が錯綜する」ってバカですか。
錯綜するほど情報が出てないでしょ。
むしろ組み込み言語の情報が集まった方がいい。

>>534=535=536
そうじゃない。前スレではLL全般ということで同意がとれていていた。
0538デフォルトの名無しさん2007/11/03(土) 12:55:10
>>537
そんなに煽りに反応しなくて良いよ。
0539デフォルトの名無しさん2007/11/03(土) 12:56:14
前スレの終わり辺りではLL全般のスレにしようって流れだったんだけど、
なんだかんだでスレタイは変わらなかったんだよ。
前スレDAT落ちしてる上に、1年以上も前の話だから、
忘れてる人も多いだろうし、最近来た人が知らないのはしょうがない。
0540デフォルトの名無しさん2007/11/03(土) 12:56:41
ちなみに俺は533ではない。

てか、ここ一年未満の新参が増えて、古参はluaをもう見放したのか?
0541デフォルトの名無しさん2007/11/03(土) 13:13:34
squirrelが気になってます
0542デフォルトの名無しさん2007/11/03(土) 15:21:49
>>540
ノシ 前スレからいます。

テンプレがあまり良くないよね。
前スレの終り頃はゴタゴタしてて急だったから立ててくれた人を責められないけど。

人も集まってるみたいだしテンプレを考えるにはいい機会かも。
できたら>11のWikiに書いておくと。
0543デフォルトの名無しさん2007/11/04(日) 21:18:36
LL全般スレになったらlua専用スレ立てればいいだけじゃんw
民主主義は多数決で決まるんだよ、ばかがw
0544デフォルトの名無しさん2007/11/04(日) 22:29:07
多数決も取ってないのによく言えるね、ばかがw
0545デフォルトの名無しさん2007/11/04(日) 23:50:22
というか、たぶんLua専用する理由ってなに?
このLL全般でやってる現在でさえスローペースなんだよ? 全然意味がわからない。
0546デフォルトの名無しさん2007/11/04(日) 23:52:22
日本語で言え俺orz

えー、Lua専用にしようという意見があるみたいなんですが、
別にレスも多いわけではないしそういった話が出る理由がわかりません。

……なんか、ごめん……。
0547デフォルトの名無しさん2007/11/05(月) 00:06:05
Lua専用にするっていうか,別に総合スレをLuaスレにしようって言ってるわけじゃなし.
今Lua専用なんだから格別の理由がなければそのままだろ.
過疎スレは過疎スレなりに3スレまで来てるんだし
わざわざ総合にするって話が出る理由がわかりません.
0548デフォルトの名無しさん2007/11/05(月) 00:16:03
別にLL総合スレを立てて、Luaスレが寂れて落ちるようなら
統合と言うことでいいんじゃない?
現状うまくいってるところを、わざわざ乱すこともないと思う。
■ このスレッドは過去ログ倉庫に格納されています