Scala:使用字符串插值将函数直接用于println(...)的方法

bil*_*pcs 7 scala string-interpolation scala-2.10

使用Scala 2.10+字符串可以进行插值.所以我有这个问题.你怎么能这样做:

println(f"$foo(100,51)%1.0f" )
Run Code Online (Sandbox Code Playgroud)

考虑foo是一个函数,如:

def foo(x1:Int , x2:Int) : Double  = { ... }
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这被评估的方式使得foo被认为没有参数因为我得到的消息是:

missing arguments for method foo in object bar;
follow this method with `_' if you want to treat it as a partially applied function
Run Code Online (Sandbox Code Playgroud)

我尝试使用括号,但仍然会出现错误.

elm*_*elm 11

包裹调用foo在大括号.

例如,让

def foo(x1: Int, x2: Int) : Double  = Math.PI * x1 * x2
Run Code Online (Sandbox Code Playgroud)

例如

foo(100,51)
res: Double = 16022.122533307946
Run Code Online (Sandbox Code Playgroud)

然后

scala> println(f"${foo(100,51)}%1.0f" )
16022
Run Code Online (Sandbox Code Playgroud)

  • @DoomProg你错了,这意味着什么.`val`不是变量 - 它是一个值.变量可以改变,值不能改变.函数式语言一直绑定局部值 - 查看任何ML族程序,你必然会看到很多`let`子句来声明不可变的局部值.您可以随意在Scala中使用`val`,而不必担心破坏功能风格. (5认同)