スクリプト開発 に戻る [編集]スクリプト開発のTips集 †このページでは,SquirrelでSimutransのスクリプトを開発するにあたってのハマリポイントなどを解説していきます. [編集]インスタンスの比較 †(確認; 2021年3月 OTRPv29_5) get_halt_list()で得られるhalt_x オブジェクトの比較には==を用いず,nameで比較するのが良いと考えられます. [編集]filter,map関数について †(確認; 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)) } |