【发布时间】:2013-10-03 20:42:39
【问题描述】:
作为 Scala 的新手,我在 sbt 控制台上玩弄部分应用的函数语法。我遇到了一个非常奇怪的问题,我不理解 Scala 的行为。
这个例子是人为的,在现实中不太可能遇到。就是说,就是这样。假设我定义了以下函数:
scala> def f(x: Int, y: Int) = "%d %d".format(x, y)
现在如果我输入
scala> f(1, _:Int)(2)
res: Int => Char = <function1>
结果是一个Int => Char 函数,这很不寻常。换句话说,Scala 在应用参数(即 2)时(暂时)将 f(1, _:Int) 视为字符串(相对于其实际类型:Int => String)。
如果使用括号,我期望发生的事情发生:
scala> (f(1, _:Int))(2)
res: String = 1 2
但是,这似乎不是操作顺序问题,因为我找不到添加括号以实现意外行为的方法(即,结果为 Int => Char 类型)。
有什么想法吗?
【问题讨论】:
-
这让我很吃惊,并且似乎与我对language specification 的第 6.23 节的阅读不一致,后者说下划线受包含它的最小表达式的约束。
标签: scala