1 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 13:13:52 ] だれか サポ−ト 頼む。 前々スレ pc5.2ch.net/tech/kako/1034/10341/1034182349.html 前スレ pc8.2ch.net/test/read.cgi/tech/1063711237/ 本家 www.lua.org/ lua-users lua-users.org/ LuaForge luaforge.net/ Lua 5.1 リファレンスマニュアル(日本語訳) sugarpot.sakura.ne.jp/yuno/html/lua51_manual_ja.html
623 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 22:29:42 ] >>621 ここは作者の掲示板ではないが、 現象が再現するミニマムコードを掲載して、仕様と挙動が異なっている点を報告したうえで、 それがバグかどうかを質問する、ってのは別に失礼でも何でもないと思うけどな。
624 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:39:26 ] >>623 これは現象が再現しない断片コードだし、仕様を取り違えてるし そもそも一定の条件を満たしていると自分では思えるというだけで 相手に失礼ではないなんてまたどこまで自分勝手な理屈だよ 常識的に考えておかしいだろ
625 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:46:38 ] >>624 >>616 は現象が再現しない、って試したの? あと作者でもないのに、作者に失礼すぎるぞ、なんて言うのも充分に自分勝手な理屈だと思うけどな
626 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:47:13 ] >>624 もったいぶらないで教えてやれよ。 無駄レスが多すぎる。
627 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:55:38 ] >>626 残念ながら2chとはそういう場所なのです。
628 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 23:59:24 ] とりあえずSquirrelユーザーがキモいというのはわかった この際原点に戻ろうじゃないか 入門Luaプログラミング www.amazon.co.jp/dp/4797342722/
629 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 00:07:36 ] 仕様取り違えてると分かってるのなら、ここをこう取り違えてるよーって言ってやればいいだけなんじゃないの? そんな、作者に失礼とか自分勝手とか卑下しまくってるとか言わんでも… ちなみに俺はよく分からんけど、>>616 の動作は期待に反している感じはする。仕様は知らない。
630 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 00:10:01 ] >>625 断片だから試せない >あと作者でもないのに、作者に失礼すぎるぞ、なんて言うのも充分に自分勝手な理屈だと思うけどな 俺作者だよ 当然のことながらsquirrelのじゃないけどね 作ってるものが馬鹿からバグ呼ばわりされたときどんな気持ちになるかは分かってるつもり
631 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 00:55:43 ] >>630 試してないのなら「再現しない」などと断定するなよ。 >>617 の箇所のコードを書いた人間の身になって考えると、確かに 一部のコードを載せられて「これはバグか?」と言われるのは 面白いものではないだろうし反論したいことも沢山あるだろうが、 質問に対する回答は一切無く、その感情に任せて馬鹿とか自分勝手とかてめー呼ばわり するだけってのは作者であろうがなかろうが人間性を疑ってしまう。
632 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 01:22:15 ] とりあえず問題がおこる「呼び出し側のコード」を書こうぜ>623 そうしないと使い方がおかしいかどうかすらわからん。 予想:引数の数を間違えてる
633 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:02:25 ] 引数の数間違えたら、実行する前に落ちるんじゃないか?
634 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:15:54 ] 引数の数が違ってると関数呼ばれないね
635 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:20:35 ] とりあえず>>632 がsquirrel使ってないってのはわかった
636 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:26:24 ] >>631 断片で不完全なものは試せるはずがない試せないものは再現するはずがない 再現するかどうか観察しなくても断片で動かないんだから再現するはずない 事実を述べてるにすぎないよ >質問に対する回答は一切無く ちょっとずつリードしてあげてるじゃん すぐに解決策が示されるとでも思ったか?俺の人間性が疑われようが甘えはゆるさん
637 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 02:58:27 ] >>636 甘えを許そうが許しまいがお前さんの勝手だが、それをスレ住人に強要するなよ レス数はとても少ないがここは色んな人間が見てる 自分のポリシーを他人に強要したり、それを守れない人間を罵倒したいのなら自分の掲示板でやれ
638 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 03:22:11 ] squirrelよく知らないけど616を参考にしてやってみた function CallSuspend1(i, j, k, l, m, n, o) { local a = 10; local b = 20; print("Enter CallSuspend1\n"); while (1) { suspend("abc"); print("i = " + i + "\n"); print("j = " + j + "\n"); print("k = " + k + "\n"); print("l = " + l + "\n"); print("a = " + a + "\n"); print("b = " + b + "\n"); break; } print("Leave CallSuspend1\n"); return "done."; } local co = newthread(CallSuspend1); print("Call CallSuspend1\n"); local ret = co.call(1,2,3,4,5,6,7); print("ret = " + ret + "\n"); print("Wakeup CallSuspend1\n"); ret = co.wakeup(); print("ret = " + ret + "\n");
639 名前:638 mailto:sage [2007/12/22(土) 03:23:12 ] 結果 Call CallSuspend1 Enter CallSuspend1 ret = abc Wakeup CallSuspend1 i = 1 j = 2 k = 3 l = 4 a = (null : 0x00000000) b = (null : 0x00000000) Leave CallSuspend1 ret = done.
640 名前:638 mailto:sage [2007/12/22(土) 03:36:38 ] 617 の ※ここ の部分を if (!v->_suspended) v->Pop(params); に変更して同じコードを実行すると Call CallSuspend1 Enter CallSuspend1 ret = abc Wakeup CallSuspend1 i = 1 j = 2 k = 3 l = 4 a = 10 b = 20 Leave CallSuspend1 ret = done.
641 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 03:46:14 ] >>638 ありがとう! やっぱり他の人がやってもそうなるんですかー 638さんはスクリプトから実行しているようですが、 自分はC++から呼び出して実行してました。 >>640 自分も同じ方法で対処するしかないのかなと思ってました。 これって結局仕様なんですか?
642 名前:638 mailto:sage [2007/12/22(土) 03:48:05 ] call と違う順番で wakeup してみる function CallSuspend2(i, j, k, l, m) { local a = 10; local b = 20; print("Enter CallSuspend2\n"); while (1) { suspend("abc"); print("i = " + i + "\n"); print("j = " + j + "\n"); print("k = " + k + "\n"); print("l = " + l + "\n"); print("m = " + m + "\n"); print("a = " + a + "\n"); print("b = " + b + "\n"); break; } print("Leave CallSuspend2\n"); return "done."; } local co1 = newthread(CallSuspend2); local co2 = newthread(CallSuspend2); local co3 = newthread(CallSuspend2); print("Call CallSuspend2\n"); co1.call(1,2,3,4,5); co2.call(10,20,30,40,50); co3.call(100,200,300,400,500); co2.wakeup(); co1.wakeup(); co3.wakeup();
643 名前:638 mailto:sage [2007/12/22(土) 03:49:23 ] 結果 Call CallSuspend2 Enter CallSuspend2 Enter CallSuspend2 Enter CallSuspend2 i = 10 j = 20 k = 30 l = 40 m = 50 a = 10 b = 20 Leave CallSuspend2 i = 1 j = 2 k = 3 l = 4 m = 5 a = 10 b = 20 Leave CallSuspend2 i = 100 j = 200 k = 300 l = 400 m = 500 a = 10 b = 20 Leave CallSuspend2
644 名前:641 mailto:sage [2007/12/22(土) 03:49:29 ] あ、それと今さらなんですが>>616 のコードでwhileしてるのって意味ないんですよね いろいろ試してる過程の残骸ですので無視して下さい
645 名前:638 mailto:sage [2007/12/22(土) 04:05:19 ] sq_call が sq_throwerror を呼び出す前に if (!v->_suspended) v->Pop(params); でsuspendしているときはスタックを整えていないことから考えるとバグかも
646 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:06:59 ] >>644 Squirrel全然分からん(昔Hello World試したくらい) けど、勉強がてら俺も>>616 試したら同じ結果になった。 ちなみに引数の数を 7つから変更(呼び出し元も変更)していくと、 3つになったところでbが正常になり、2つになるとaもbも正常になった。 これが仕様だとすると何か根本的根本的に使い方間違ってんのかな? sq_call とか sq_wakeupvm とかの引数とか色々変えてみたけど、勉強がてらなんでまだよく分からん。 整理できたら多少空気読みつつ晒してみる
647 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:08:59 ] >>630 で吹いた。ギャグだとしたら高度だ。
648 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:10:37 ] >>645 あまりバグバグ言うとまた五月蝿くなるからやめとけ
649 名前:632 mailto:sage [2007/12/22(土) 04:13:48 ] すまん、ばりばりつかってるんだが適当ぶっこいたんだ。 おわびにってことで俺もしらべてたんだが、既に638 で結論でてた… function test(i,j,k,l,m) { local a = 10; local b = 20; for (a=0;a<10;a++) { suspend(); print("a=" + a + "\n"); print("b=" + b + "\n"); } print("done"); } a <- newthread(test); a.call(1,2,3,4,5); while (a.getstatus() == "suspended") { a.wakeup(); } こんなかんじのコードで簡単に再現できる。test の引数の数を減らすと ローカル変数が破壊されなくて止まらなくなるので、sq_call での引数の解放でローカル変数を 破壊してるという、641の推測は正しいと思う。どういった修正が適切かは断言できないけど、 バグなのは間違いないので、本家に報告したほうがよさそう。 自分の手元でこの種のスレッドの suspend を使ったコードはいたるところにあるんだが なんでいままでトラブルなかったんだろう、とおもってコードを見直したら、 パラメータは bindenv したオブジェクトのメンバ経由で渡してて、引数を全くつかってなかったよ^^;
650 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:15:59 ] >>646 まさにまさに! 自分もまさか4つ以上引数を渡すのはダメとかそういう仕様じゃないよな? でもこんなイージーなバグがあるわけないよな? てな具合にずっと悩んでたんです!
651 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:26:04 ] >>649-650 だからバグだバグだと騒ぐなと
652 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:42:00 ] 君もこんな過疎地でオタ共を統率して悦に入ってないでニュー速だかvipだかにでもお行きなさいよ
653 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 04:47:46 ] あー読んでてやっと分かった。 スタック上にローカル変数があろうが無かろうが、suspend時点でのスタック変数を引数の数だけ問答無用で開放してしまうのか。 なんで>>646 みたいに現象は引数の数に変化を受けると。 で、単に使い方が悪いのかバグなのかは不明だけど、 squirrelのコードを>>640 の通りに変更すれば少なくとも、この問題は解決、と。
654 名前:649 mailto:sage [2007/12/22(土) 04:56:40 ] とりあえず下手な英語だが本家にバグとして報告しといたよ。たぶんそのうち適切な対策とってくれるだろう。
655 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 05:08:02 ] ほげげ氏・・・w ところどころ動詞やらが可笑しいけど伝わるな Unknown table ってのは内部用のローカル変数のテーブルか何かなのかね? 他のスレも見てみたけど本家のフォーラムって意外と閲覧数少ないんだな・・・
656 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 09:53:25 ] squirrelは別のとこでやれよ
657 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 10:28:10 ] Luaの本はまだなのか。
658 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 11:48:48 ] >>656 前スレ&現行スレ嫁
659 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 15:55:02 ] 次スレから >>1 嫁にできるよう頼む
660 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:29:26 ] 作者対応速いな squirrel-lang.org/forums/2318/ShowThread.aspx#2318
661 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:00:33 ] 相変わらず閲覧数少ねえーーw 結論としてはやっぱりバグで、修正方法は>>640 の通りだったと。 発見された>>616 氏、本家に報告されたほげげ氏、その他検証された方々乙でした。
662 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:03:02 ] >>660 報告乙
663 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:05:59 ] >>661 621のこと忘れてるぞ 椰子の煽りがなければ住人もここまで迅速に動かなかっただろう
664 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:09:11 ] 自演乙
665 名前:デフォルトの名無しさん [2007/12/24(月) 03:36:26 ] Lua本もう出てたんだ。ProgrammingInLua持ってるけど買う意義あるかな。
666 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 06:09:14 ] おおほんとだ出てるな A5、256ページで\2310ってちょっと高くないかな、、、こんなもんか 買った人レビュー希望
667 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 07:01:02 ] >>666 値段はまあ普通だろうね マイナー言語の一種だし・・・ Erlang入門なんて同じ値段で200ページしかない。 ともかく日本語で出たことが快挙
668 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:33:56 ] >>666 入門書としてはこれくらいの長さのほうがとっつきやすいかも。 Lua触るの初めてでしたが、読みやすくて、なかなかよかったです。 奥付みてみたら、2008年1月3日初版第一刷発行とか書いてあってワラタ
669 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:47:05 ] 雑誌の「発行日」の記載って、なぜみんな 実際の発売日よりも1ヶ月くらい未来の日付になっているのでしょうか? ttp://q.hatena.ne.jp/1153656810
670 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 00:55:20 ] Lua本届いたー 第一部が基本文法。標準ライブラリとか。さくっと読める 第二部がアルゴリズム実装しながらその他機能。結構いろいろ詰まってる。 第三部がC言語との連携その他。 入門ならこの厚さがちょうど手頃でいいかも。
671 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:17:43 ] 入門だけか。 実際に使い出して結構経つ俺には、どのぐらい役に立つのかなぁ。
672 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 05:18:46 ] >>670 第三部ってどの程度ページある? ここがある程度詳しく書かれているなら買ってみてもいいかなあ
673 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 13:28:19 ] >>672 第三部の内訳 第9章 Luaを拡張してみる - 13 第10章 Luaのモダンな機能 - 15 第11章 C言語との連携 - 13 第12章 Luaの組込み - 10
674 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 14:21:04 ] >>673 詳しい情報さんきゅ 帰ったら注文するわ
675 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 01:59:29 ] Squirrelの日本語リファレンス復活しとる
676 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 02:29:49 ] 結構前から復活してる というより見られなくなってたのはほんの短期間だった floatのスペルミスはどうにかならないかなあ
677 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 02:33:56 ] いや、落ちて戻って繰り返してるし、またいつなくなるか 分からんから、見たかった人は今のうちに見ておくのが良いかと。
678 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 02:40:16 ] そうなのか。 保存しとこう。
679 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 07:40:09 ] サーバー落ちてただけのようですね。 でもac.jpですから、今のうちということですな
680 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 15:23:23 ] あれ、博士課程を修了したからHPも消えた、って話じゃなかった? かなり長い間見れなかったような気がするんだが。 まあどっちだっていいんだけど。
681 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 00:52:15 ] ぅあけましておめでとう!
682 名前:デフォルトの名無しさん [2008/01/02(水) 02:20:12 ] ぅあけおめ!
683 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:40:09 ] あけおめ! 今年も、組み込み言語が流行るといいな!
684 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:52:06 ] asdfasfasdfasdfasdf
685 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 09:07:06 ] >Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland >test.cpp: >Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland >Error: 外部シンボル '_luaL_newstate' が未解決(D:\P\BORLANDC\TEST.OBJ が参照) >Error: 外部シンボル '_luaL_loadfile' が未解決(D:\P\BORLANDC\TEST.OBJ が参照) >(以下略) こんな感じでリンクできないんですがどうしたらいいですか。 パスは通ってると思うんです。lua 5.1.2です。
686 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 10:45:48 ] >>685 勘だけどextern "C" かな。src/lua.hの代わりにetc/lua.hppを使ってみるとか。
687 名前:685 mailto:sage [2008/01/10(木) 16:12:22 ] extern "C"は使ってるんですけどねえ。うーむ
688 名前:デフォルトの名無しさん [2008/01/10(木) 21:31:19 ] 再現するコードを貼りたまえ。
689 名前:685 mailto:sage [2008/01/10(木) 21:46:05 ] #include <stdio.h> extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } main(){ double z; lua_State *L = lua_open(); lua_dofile(L, "add.lua"); }
690 名前:685 mailto:sage [2008/01/10(木) 21:47:08 ] testなのでこれだけなんです。
691 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 21:49:42 ] Borlandの場合は命名規則と呼び出し規約が違うからではないかと。 VCでコンパイルされたライブラリをリンクするときに良くある問題。 詳しくはぐぐればわかると思う。細かいことは忘れた。
692 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:00:54 ] ライブラリはちゃんと設定してる?
693 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:09:06 ] ライブラリをリンクしてないとか
694 名前:デフォルトの名無しさん [2008/01/10(木) 22:28:07 ] lua_dofileって5.1.2になくね?
695 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:39:24 ] ないよ。 lua_dofileでぐぐれば代替コードが見つかる。
696 名前:デフォルトの名無しさん [2008/01/10(木) 22:46:01 ] 685はなんでリンクまでは行ったの?
697 名前:685 mailto:sage [2008/01/11(金) 01:32:18 ] そうなんですよ。コンパイルは通ってるように見えるんでincludeは多分見てる。 普段はbccでは簡単なものしか作ってないしライブラリやリンク設定は自信ないですが。 ヘルプ見て作業フォルダにbcc32.cfg,ilink.cfgを作り -L"libraryパス";"パス" -I"includeパス" などとやりました。頭をわざと--Lとやったら >エラー E2075: コンフィグレーションファイル中の オプションの間違い : --LD:\〜略 とエラーになるので読んでるとは思うんですが。 685ではもう5個くらいlua_関数があって全部おなじようなエラーです。 lua_dofileはぐぐりました。 685にあるようにヘッダ読んで_luaL_loadfileまではいくようです。 lua_openも_luaL_newstateに置き換わってる。 バイナリエディタでLuaLib.libをのぞくと2つとも文字列は見つかるようです。 そこからは俺の実力ではどうにも。 691でしょか。
698 名前:685 mailto:sage [2008/01/11(金) 01:35:45 ] 訂正 ilink32.cfgです すんません
699 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:24:27 ] そう思うんだったら、luaのライブラリもbccで作ればいんじゃね?
700 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 05:23:44 ] まさか、VCのlibをBCCでリンクしようとしてないよな?
701 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 06:57:05 ] 自分でBCC使ってビルドしてないのかよ。 そりゃ無理にきまっとる
702 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 07:41:10 ] とりあえずわかったのは、いいやつが多い
703 名前:デフォルトの名無しさん [2008/01/11(金) 08:17:26 ] しょうがないからBCCでLuaをビルドする一番簡単な方法をおしえてやろう。後は適当にやりなさい。 D:\lua-5.1.2\src>rename luac.c luac.c_ D:\lua-5.1.2\src>bcc32 -I. -D_isatty=isatty *.c (略) D:\lua-5.1.2\src>rename *.exe lua.exe D:\lua-5.1.2\src>lua Lua 5.1.2 Copyright (C) 1994-2007 Lua.org, PUC-Rio >
704 名前:685 mailto:sage [2008/01/11(金) 09:01:59 ] なるほどいろいろ勉強になります。互換じゃないんですかこういうのは。出直してきます
705 名前:デフォルトの名無しさん [2008/01/12(土) 13:59:52 ] xxx.luaとxxx/table.luaから成り立つライブラリがあって、 --xxx.lua require "xxx" module("xxx",package.seeall) function xxx_func() table.insert(...... --xxx/table.lua require "xxx" module("xxx.table",package.seeall) xxx_func() --main.lua require "xxx.table" を実行するとxxx.luaのtable.insertがnilになってる。理由はxxx.table のモジュールで"insert"を探しに行ってしまっている為。 問題はxxx.luaだけで使うと問題が起きずxxx/table.lua経由で 使用すると問題が起きるという事だけど、この問題の本質って なんだろう?xxx.”table” 見たいな標準ライブラリと同じ名前の モジュールを作成したこと?
706 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 16:19:01 ] >>705 moduleはxxx.luaの環境を自身のモジュールのテーブルに変更する(この場合_G.xxx)。 つまりtable.insertはxxx.table.insertになる。 moduleにpackage.seeallを指定するとxxx.tableが存在しなかった場合に_G.tableを見に行くようになる。 回避策としてはtable.insertを_G.table.insertにすればいいと思うよ。 めんどくさかったらxxx.luaの先頭で local table=table それはそうと、そのコードだと外からxxx_funcを使いたい時にxxx.xxx_funcって書く必要があって不便じゃないか?
707 名前:705 mailto:sage [2008/01/12(土) 16:43:02 ] >>706 >local table=table まさにそれをやってとりあえず回避してます。 ただそうなると後からの拡張に備えるならばxxxで呼び出している _Gの全てのメンバに対してそれをやらないと安全でない事に。 そうなるとpackage.seeallの役割って・・・。
708 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 00:27:18 ] >そうなるとpackage.seeallの役割って・・・。 ただの手抜き道具。 安全云々なら local _G = _G module("xxx") でオシマーイ。
709 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 10:57:54 ] Squirrel に関数内で使える静的変数ってないのでしょうか? 今は仕方なくグローバルに置いてるのですが。
710 名前:デフォルトの名無しさん [2008/01/14(月) 13:40:53 ] Squirrel 知らんけど、もしクロージャがあればどうにかなるのでは。 Lua だとこんな。 > f = (function () local v = 0 return function () v = v + 1 return v end end)() > print(v) nil > print(f()) 1 > print(f()) 2 > print(f()) 3 > print(v) nil
711 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 14:19:30 ] >>709 ttp://muffin.cias.osakafu-u.ac.jp/~matumoto/cgi-bin/xt.cgi?prog/squirrel_lang ここに静的変数について説明があるけど、これじゃ駄目なのか?
712 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:47:49 ] レスありがとうございます。 >>710 真似てみて以下のようなコードを書きましたが、 実行時しても、111が出力されました。 function func() { v <- 0; return function() { return ++v; }(); } print(func()); print(func()); print(func()); >>711 クラスのメンバ変数でしか使えなく、さらに書き換えが無理なので、使い勝手が悪そうです。
713 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 16:12:55 ] 同じくLuaしか知らんからマニュアル見ながら勘で答えるけど { local v = 0; function count() { return ++v; }} こんな感じのことがしたいのかな。Luaなら do local v = 0; function count() v = v + 1; return v; end; end
714 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 16:14:01 ] 質問から少し話はそれるけど、 インスタンスを作成すると、そのクラスのスロットの追加変更が効かなくなるってのは 仕様として分かるんだが、静的メンバまで変更不可になるのはどうにかしてしてほしい。
715 名前:デフォルトの名無しさん [2008/01/14(月) 16:19:38 ] えー、それって直訳になってる? vの初期化がfunc呼出し毎に毎回起こってないかな。 外側のfunctionを適用した結果のreturn function...のfunctionがfuncの値になるんよ。
716 名前:デフォルトの名無しさん [2008/01/14(月) 16:24:31 ] 715は712へのレスね。
717 名前:709 mailto:sage [2008/01/14(月) 16:31:53 ] >>716 以下のように書き直してみたところうまく動きました。 local v = 0; では駄目で v <- 0; にする必要があるみたいです。 動作原理がいまいちわかっていないので詳しく追ってみます。 local f = (function() { v <- 0; return function() {return ++v;} })(); print(f()); print(f()); print(f());
718 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:16:55 ] >>717 それグローバル変数 v が確保されてるだけだよ >>710 の例ぽいことは squirrel なら generator つかえば簡単にできるけど、 それはあくまで「その中に閉じた変数」であって、全体で共有される static 変数じゃない。 用途的にstatic なら、名前に気をつけつつグローバルにおくしかないはず。
719 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:07:21 ] 日本でLua使ってる製品ってなにかある?
720 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:11:45 ] 同人なら割と
721 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:58:14 ] 同人ゲーム? ノベルはある?
722 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 19:07:55 ] 関数内の静的変数なんて、C言語使いしか使わん
723 名前:709 mailto:sage [2008/01/14(月) 19:08:23 ] >>718 > それグローバル変数 v が確保されてるだけだよ <- はlocalをつけずに初期化するためだけのものだと思ってました。 もっと勉強しないと駄目ですね。