1

これに触発されて、Scala でタイプ セーフな文字列補間を (おそらくマクロを使用して) 行えるかどうか疑問に思っていました。

たとえば、私はこのようなものが欲しい

def a[A] = ???
val greetFormat = f"Hi! My name is ${a[String]}. I am ${a[Int]} years old" 
greetFormat.format("Rick", 27)  // compiles
//greetFormat.format("Rick", false)  // does not compile
//greetFormat.format(27, "Rick") // does not compile
//greetFormat.format("Rick", 27, false) // does not compile
//greetFormat.format("Rick") // does not compile or is curried?
4

3 に答える 3

3

文字列インターポレーターは、f既にマクロで実装されています。

これは、REPL 内で実証できます。

scala> val b = "not a number"
b: String = not a number

scala> f"$b%02d"
<console>:9: error: type mismatch;
 found   : String
 required: Int
              f"$b%02d"
                 ^
于 2014-05-06T21:19:52.763 に答える
2

関数でラップするだけです。

def greet(name: String, age: Int) = s"Hi! My name is $name.  I am $age years old"
于 2014-05-06T21:12:48.800 に答える