匿名ホールと名前付きホール
💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。
Flix では、開発中の未完成なコードに Hole(ホール)を使うことが推奨されています。例えば:
def sum(x: Int32, y: Int32): Int32 = ???
3 つ並んだクエスチョンマーク ??? は匿名ホールを表し、式が期待される場所ならどこでも使えます。上記のコードでは、??? はまだ書かれていない関数本体を表していますが、式の内部でも使えます。例えば:
def length(l: List[a]): Int32 = match l {
case Nil => 0
case x :: xs => ???
}
プログラムに複数のホールがある場合は、それぞれに名前を付けると便利です。例えば:
def length(l: List[a]): Int32 = match l {
case Nil => ?base
case x :: xs => ?step
}
Flix では、各名前付きホールは一意な名前を持つ必要があります。
変数ホールと自動補完
Flix は、型駆動の自動補完候補を提示できる特別な 変数ホール をサポートしています。例えば、次のプログラムで:
def main(): Unit \ IO =
let s: String = "Hello World";
let n: Int32 = s?;
println("The length of ${s} is ${n}!")
カーソルを s? の上に置いて自動補完候補を要求すると、Flix は次のような候補を提示します:
String.length(s: String): Int32String.countSubstring(substr: {substr: String}, s: String): Int32String.levenshtein(s: String, t: String): Int32- …
これらは String を Int32 に変換できる関数だからです。
別の例として、次のプログラムで:
def main(): Unit \ IO =
let l: List[Int32] = List.range(1, 10);
let n: Int32 = l?;
println("The value of `n` is ${n}.")
カーソルを l? の上に置くと、Flix は次のような候補を提示します:
List.product(l: List[Int32]): Int32List.sum(l: List[Int32]): Int32List.fold(l: List[Int32]): Int32List.length(l: List[Int32]): Int32List.count(f: a -> Bool \ ef, l: List[a]): a \ ef- …
これらは List[Int32] を Int32 に変換できる関数だからです。