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

Want to regard pattern variables as ordinary variables

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

match 文でレコードのパターンを使った際、そのパターンの矢印の右側ではパターン変数を普通の変数としてドラッグして使えるようにしたいです。現在は、x :: xs のパターンなら x や xs をドラッグできますが、レコードのパターン変数はドラッグできないようです。加えて、これらのパターン変数がスコープお砂場にも現れて欲しいです。

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

報告ありがとうございます。 実装してみました。確認お願いします。

ちなみにですが、今は定義ブロックを変に組み替えたりしないことを仮定しています。

type a = { field: int }
match ? with
  | { field: x } -> x + x

とかしたあとに、record定義のブロックにある int のブロックを外したときの挙動はまだどうするか考えられてないです。。今はとりあえずクラッシュします。(笑)

harukamm avatar Mar 28 '19 19:03 harukamm

早速、ありがとうございます。うまくいっているように見えます。

定義ブロックを組み替えた場合ですが、問題となるのは int ブロックを外し たりしたときですよね。とりあえず、パターンブロック中の該当するパターン 変数のコネクタが×になるのは良いと思います。その上でそのパターン変数が どこにも現れていなければ、そのままでOK。現れていたら

  • パターン変数が現れていたら、そのパターン変数は削除される。(let rec の rec を消したら、対応する再帰呼び出しが丸ごと消えるのと同じ。)
  • パターン変数が現れていたら、そもそも int ブロックを外せない。

のどちらかかなと思います。let rec と合わせて前者かなと思いますが、いか がでしょうか。

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