スクリプト開発 に戻る
このページでは,SquirrelでSimutransのスクリプトを開発するにあたってのハマリポイントなどを解説していきます.
間違っている情報があればどんどん訂正お願いしますです.
(確認; 2021年3月 OTRPv29_5)
halt_list_x()や, player_x.get_line_list() で得られるインスタンス列は,毎回中身が異なるようです.すなわち,get_xxx_list()で得られるインスタンスでは,演算子==によるオブジェクト比較が使えません.
get_halt_list()で得られるhalt_x オブジェクトの比較には==を用いず,nameで比較するのが良いと考えられます.
(確認; 2021年3月 OTRPv29_5)
Squirrelにはarray.filter()関数や, array.map()関数が用意されていますが,これらの使用は以下の理由から推奨されません.
実際の開発ではarrayもxxx_list_xオブジェクトも同様に扱いたい場合が多いと思いますので,以下のようにfilterおよびmap関数を定義してあげるのがいいでしょう.
function _step_generator(iteratable) { foreach (obj in iteratable) { yield obj } } function filter(array, func) { local new_array = [] foreach (obj in _step_generator(array)) { if(func(obj)) { new_array.append(obj) } } return new_array } function map(array, func) { local new_array = [] foreach (obj in _step_generator(array)) { new_array.append(func(obj)) } return new_array }
使用するときは以下のようになります.
// 容量1000人以上以上の停留所一覧を返す funtion get_big_halt() { return filter(halt_list_x(), ((@h) h.get_capacity(good_desc_x.passenger)>=1000)) }