記事一覧

YAYAの関数TOAUTOを使うときは慎重に

YAYAの関数TOAUTOはちょっと危険

これのおさらいです。

前回までのおさらい

意図しない挙動の例
{
  TOAUTO('000123')  // => 123
  --
  TOAUTO('.')       // => 0.000000
}

使わなければ良いだけの話ですが、「はろーYAYAわーるど」などのテンプレートゴーストにはミドルウェアレベルで組み込まれています。具体的には、イベントのReferenceがTOAUTOを経由した状態でreference配列に格納されています。つまり、Reference0に"."が入っている場合でも、reference[0]を参照すると"0.000000"となってしまいます。

対策

最大の問題はTOAUTOの変換が「不可逆」であるという点です。"123"という値がreference[0]で参照出来ても、本当に送られてきた文字列が"123"だったのか"0123"だったのか"000123"だったのか判断のしようがありません。

なので不可逆な変換のみ無効とする関数TOAUTOEXを新たに定義しました。

{
  TOAUTOEX('000123')  // => 000123
  --
  TOAUTOEX('.')       // => .
  --
  TOAUTOEX('1') + TOAUTOEX('1') // => 2
}

TOAUTOEX
{
  _v = _argv[0]
  if TOSTR(TOAUTO(_v)) == _v {
    TOAUTO(_v)
    retrun
  }
  _v
}

yaya_shiori3.dicの414行目のTOAUTOをこのTOAUTOEXに置き換えることでreference参照の不具合を回避できます。