ocaml-blockly icon indicating copy to clipboard operation
ocaml-blockly copied to clipboard

The same pattern variable is allowed but should be rejected.

Open kenichi-asai opened this issue 6 years ago • 4 comments

(レコードのサポート、ありがとうございます。) 現在、match 文で、レコードのパターンを使うと、パターン変数に同じ変数がデフォルトで入っていますが、異なる変数にしたいです。加えて、ユーザが同じ名前のパターン変数に rename しようとしたら拒否したいです。

kenichi-asai avatar Mar 28 '19 12:03 kenichi-asai

ご報告ありがとうございます!

異なる変数にすることに関しては、どっちのタイミングが適切だと思いますか。

  1. パターンお砂場のサイドメニューの時点で
  2. マッチブロックに接続する瞬間に

実装的には 2. のほうが楽かなと思います。

同じ名前のパターン変数にしようとしたら拒否するのは、大事ですね。実装的には、https://github.com/harukamm/ocaml-blockly/blob/master/core/bound_variables.js#L396 この関数をいじることになるかなあという見通しです。

harukamm avatar Mar 28 '19 19:03 harukamm

楽な方でなくて申し訳ないですが(笑)、パターンお砂場でも、出て来たら別のパターン変数名になっていてほしい気がします。 デフォルトのパターン変数名を、いつも「フィールド名に _v をつけたもの」にするというのはいかがですか。そうしておけば(フィールド名が重ならないようにできているのであれば)パターン変数名も(出てきてすぐは)重ならなくなるように思います。あとは、ユーザが変更したときに、同一のパターン内に現れていないことを確認すれば良いのかと。

kenichi-asai avatar Mar 29 '19 01:03 kenichi-asai

関連して、レコードや variant のデフォルトの型名は a, b 等でなく、うしろに _t をつけた a_t, b_t 等にしたいです。

kenichi-asai avatar Mar 29 '19 07:03 kenichi-asai

この issue は、プルリク #38 でほとんど解決したと思います。懸案は以下。

  • 「同じパターン変数名にしようとしても拒否していない」件はまだです。書いてくれている通り、https://github.com/harukamm/ocaml-blockly/blob/master/core/bound_variables.js#L396 を変更することになると思うのですが、どうもこの関数の動きを理解できていません。ぼくの方は、これは当分保留です。
  • バリアント定義の方は、まだ型名が data で決め打ちのままです。これを data_t に変更することはできますが、毎回、同じ名前になります。レコード定義の方は、型名はブルダウンメニューになっていますが、バリアント定義の方は書き込める形になっています。個人的には、後者に統一できると良いと思うのですが...。
  • 関連して、バリアント定義の型名にマウスを合わせると、どういうわけかフィールドもハイライトされます。

kenichi-asai avatar Apr 17 '19 05:04 kenichi-asai