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

Scala:使用字符串插值将函数直接插入println(…)的方法,scala,scala-2.10,string-interpolation,Scala,Scala 2.10,String Interpolation,使用Scala 2.10+可以进行字符串插值。所以我有一个问题。如何做到这一点: println(f"$foo(100,51)%1.0f" ) 考虑到foo是一个类似以下的函数: def foo(x1:Int , x2:Int) : Double = { ... } 据我所知,这种计算方式使foo被认为没有参数,因为我得到的信息是: missing arguments for method foo in object bar; follow this method with `_' if

使用Scala 2.10+可以进行字符串插值。所以我有一个问题。如何做到这一点:

println(f"$foo(100,51)%1.0f" )
考虑到foo是一个类似以下的函数:

def foo(x1:Int , x2:Int) : Double  = { ... }
据我所知,这种计算方式使foo被认为没有参数,因为我得到的信息是:

missing arguments for method foo in object bar;
follow this method with `_' if you want to treat it as a partially applied function

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

将对
foo
的调用用花括号括起来

比如让

def foo(x1: Int, x2: Int) : Double  = Math.PI * x1 * x2
例如,在哪里

foo(100,51)
res: Double = 16022.122533307946
然后


非常感谢你。我只是不想在我的程序中使用val,这样它就可以完全正常工作。那么
val
如何使它不正常工作?不使用局部变量。@DoomProg你搞错了这意味着什么。
val
不是一个变量-它是一个值。变量可以更改,值不能更改。函数式语言总是绑定本地值——看看任何ML系列程序,你肯定会看到许多
let
子句来声明不可变的本地值。您可以在Scala中随心所欲地使用
val
,而不用担心破坏函数样式。@DoomProg要继续@KChaloux,最大的问题是可变性,特别是当它从函数/对象外部可见时。函数式编程强调引用透明性,这是给定相同参数时始终返回相同结果的特性。可以使用
var
并仍然保留R.T.,尽管我想不出什么时候需要这样做。我通常使用大量的
val
s将代码分解为易于理解的步骤。每条线路的大多数操作都没有奖励:)
scala> println(f"${foo(100,51)}%1.0f" )
16022