「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@463) [低] [議論中]
@463■ (#1462) luaの引数と配列テーブル - ちび (2010-01-26 22:37) /低 未処理
【症状】luaの引数が悪いのかなでしこからの引っ張り方が悪いのか、
attempt to compare nil with numberをエラーとして吐く
【再現方法】
どこでもいいから以下のluaソースを組み込む
function hoge(hogehoge,a,b)
hogehoge[a]=c
hogehoge[b]=d
end
とするとどこから引数を持ってきてもエラーになる
【要望】ソート用の配列を使うプログラムなので、
できる限り引数から配列は無くさないでもらいたいです
【バージョン】1.5324
【その他】なでしこ本体とはあまり関わりが無いですが、
なでしこの拡張性を高めるためには避けては通れない道だと判断しました
どうか迅速な対応をお願いします

(#1463) 再現しません - SWinX (2010-01-27 09:50) /低 詳細求む!
こちらでは期待通り動いているようです。(Ver.1.5325)

http://www.ragfun.net/alchemist/index.php?Lua%2FAI%2FError
によると、そのエラーは
/AI/USER_AI/AI.lua:36: attempt to compare nil with number
nil 値と比較演算を行った 
もしくは値を代入していない変数と比較演算を行った

ということなので、他の部分に間違いはありませんか?
試した「なでしこソース」を提示してみては?

//
『function hoge(hogehoge,a,b)
  hogehoge[a]=c
  hogehoge[b]=d
end

tbl={"あ","い","う"}
c=3
d=4
hoge(tbl,1,2)
print(tbl[1])
』をLUAする

(#1466) 関数 - ちび (2010-01-27 22:57) /低 詳細求む!
提示されたソースだと動きますね……
ではなでしこソースを一部分だけ提示してみます

{}の中身をq_sort.hとしてなでしこソースのカレントディレクトリに保存
{
function q_sort(left,right)
  l_hold=left
  r_hold=right
  pivot=numbers[left]
  while(left<right)do
    while(numbers[right]>=pivot and left<right)do
      right=right-1
      if(left~=right)then
        numbers[left]=numbers[right]
        left=left+1
      end
    end
    while(numbers[left]<=pivot and left<right)do
      left=left+1
      if(left~=right)then
        numbers[right]=numbers[left]
        right=right-1
      end
    end
  end
  numbers[left]=pivot
  pivot=left
  left=l_hold
  right=r_hold
  if(left<right)then
    q_sort(left,pivot-1)
  end
  if(left>right)then
    q_sort(pivot+1,right)
  end
end
i=0
numbers={0,0,0,0,0}
while(1)do
  if(き[i]==nil)then
    break
  else
    numbers[i]=き[i]
    i=i+1
  end
end
nako_set("き",q_sort(0,4))
}

なでしこソース

おは「bin\q_sort.lua」を開く
き=「1
3
4
0
2」
おをLUAする
きを表示

(#1467) 配列やハッシュの相互運用 - SWinX (2010-01-28 00:58) /低 議論中
提示いただいたソースでは、lua環境で"き"という配列が定義されてません。
なでしことluaは別の言語エンジンですから、
必要に応じて明示的に引渡しを行わない限り変数を共有しません。

また、現状では
・なでしこの配列をluaでnako_getすると文字列になり
・luaの配列をなでしこから「LUA値」で参照するとエラー終了するようです。
これを回避するには、なでしこ-lua間は
JSONエンコードして渡し、受け取ってJSONデコードしてはどうでしょうか。
http://d.aoikujira.com/blog/index.php?2009%252F04%252F16%252Flua%E3%81%AE%E5%A4%89%E6%95%B0%E3%82%92%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BA%E3%81%99%E3%82%8B


//サンプル1
A[0]="B"
A[1]="C"
AをJSONエンコードして表示
『D=nako_get("A")』をLUAする
LUA値("D")をJSONエンコードして表示

//サンプル2
『A={"A","B","C"}』をLUAする
LUA値("A")を表示  //エラー

(#1469) なでしことlua - ちび (2010-01-28 23:30) /低 議論中
確かにこちらの方法ですと、
lua-なでしこ間の配列の受け渡しが可能みたいですね…

しかしJSONエンコードがよくわかりません
(配列・文字列を数値化するぐらいしか…)
まずサンプル1とサンプル2の違いがlua側でnako_get()を使っている、
なでしこ側でLUA値()を使っているぐらいしか…

文字列の最初と最後に「"」が入るのは何故ですか?
また、なでしこ側からLUA値()を使って呼び出すときに、
直接配列に代入することはできませんか?
仮に、配列を直接配列に代入することができなくても、
配列をnako_get()した文字列を配列に変換・分割することは技術的に可能ですか?
自分でもいろいろ調べてみましたがよくわかりません……
できたらなるべく簡単な方法でお願いします

(#1462)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能