The same pattern variable is allowed but should be rejected.
(レコードのサポート、ありがとうございます。) 現在、match 文で、レコードのパターンを使うと、パターン変数に同じ変数がデフォルトで入っていますが、異なる変数にしたいです。加えて、ユーザが同じ名前のパターン変数に rename しようとしたら拒否したいです。
ご報告ありがとうございます!
異なる変数にすることに関しては、どっちのタイミングが適切だと思いますか。
- パターンお砂場のサイドメニューの時点で
- マッチブロックに接続する瞬間に
実装的には 2. のほうが楽かなと思います。
同じ名前のパターン変数にしようとしたら拒否するのは、大事ですね。実装的には、https://github.com/harukamm/ocaml-blockly/blob/master/core/bound_variables.js#L396 この関数をいじることになるかなあという見通しです。
楽な方でなくて申し訳ないですが(笑)、パターンお砂場でも、出て来たら別のパターン変数名になっていてほしい気がします。 デフォルトのパターン変数名を、いつも「フィールド名に _v をつけたもの」にするというのはいかがですか。そうしておけば(フィールド名が重ならないようにできているのであれば)パターン変数名も(出てきてすぐは)重ならなくなるように思います。あとは、ユーザが変更したときに、同一のパターン内に現れていないことを確認すれば良いのかと。
関連して、レコードや variant のデフォルトの型名は a, b 等でなく、うしろに _t をつけた a_t, b_t 等にしたいです。
この issue は、プルリク #38 でほとんど解決したと思います。懸案は以下。
- 「同じパターン変数名にしようとしても拒否していない」件はまだです。書いてくれている通り、https://github.com/harukamm/ocaml-blockly/blob/master/core/bound_variables.js#L396 を変更することになると思うのですが、どうもこの関数の動きを理解できていません。ぼくの方は、これは当分保留です。
- バリアント定義の方は、まだ型名が
dataで決め打ちのままです。これをdata_tに変更することはできますが、毎回、同じ名前になります。レコード定義の方は、型名はブルダウンメニューになっていますが、バリアント定義の方は書き込める形になっています。個人的には、後者に統一できると良いと思うのですが...。 - 関連して、バリアント定義の型名にマウスを合わせると、どういうわけかフィールドもハイライトされます。