HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1210
HIJIKIHSPでeach文 (rubyやluaにあるような)3解決


HIJIKI

リンク

2014/12/10(Wed) 12:43:09|NO.66373


#define each(%1, %2) foreach %1:%2=%1(cnt) Numbers = 2,4,6,8,10 Names = "イ", "ロ", "ハ", "ニ", "ホ" each Names, Name put = Name + ":" each Numbers, Number put += Number loop mes put loop

-----------------------------------
each p1, p2

p1=変数 : ループ対象となる変数
p2=変数 : ループ対象の要素を代入する変数

p1の配列変数に格納されている要素の数だけ繰り返しを行います。
eachは、repeat命令と同様にループ開始場所に記述し、 ループの終了場所にloop命令を記述します。
-----------------------------------

この命令の問題点は、ループ内でp2に対して代入しても、
元データ(p1)には反映されないこと。
メモリアドレスを割り当てるなどして、p2に代入するとp1にも代入されるようにするべきか?
そもそも Ruby や Lua ではどのような仕様になっているか、忘れてしまった…。

カテゴリは「ひとりごと」ですが、改善案や 上記問題点の解決法や
Ruby および Lua ではどういう仕様か、思い思いにお書きくだされば幸いです。



この記事に返信する


tds12

リンク

2014/12/10(Wed) 13:40:17|NO.66374

こうすればp2への代入を反映させることができると思います。

#define each(%1, %2) foreach %1:dup %2,%1(cnt)



zero

リンク

2014/12/10(Wed) 18:00:59|NO.66381

元の配列を変えたくない場合もあるかもしれないので別に代入されなくてもいいのでは?


参考 a = [2, 4, 6, 8, 10] a.each {|v| v = v * 2 } p a #=>[2, 4, 6, 8, 10]



HIJIKI

リンク

2014/12/10(Wed) 23:49:40|NO.66404

>>tds12 さま
お返事ありがとうございます。
なるほどこんな単純な話だったのですね。
活用させていただきます。ありがとうございました。

>>zero さま
お返事ありがとうございます。
これはRubyのコードですね?
そもそもRubyでは元データへ書き込みはしない仕様なのですね。
でしたら現状のままが、一番混乱を招かないかもしれないですね。
参考になりました。ありがとうございました。



ONION software Copyright 1997-2018(c) All rights reserved.