一个参数功能

时间:2016-10-25 02:59:57

标签: scala

如果我从下面删除括号以阅读printFn hc,我会收到错误消息。我在Scala中认为一个参数函数不需要parens?

case class HelloClass(arg1:String)


object HelloWorld extends App {
  var hc = HelloClass("Hello World")
  printFn(hc)

  def printFn(a1:HelloClass) : Unit = {
    println(a1 arg1) /* or a1.arg1 */
  }
}

2 个答案:

答案 0 :(得分:4)

我认为你把它与infix method notation混在一起了。在Scala中,您可以编写obj.method(argument)obj method argument

要将此应用于您的示例,您需要" obj"表达式的一部分,所以如果你想避免括号,你可以写

this printFn hc

另见"When to use parenthesis in Scala infix notation"

答案 1 :(得分:1)

我想补充一些关于 postfix 的内容,作为关于 infix 的另一个答案。来自Programming Scala

  

因此,1 + 2与1。+(2)相同,因为“中缀”符号在哪里   我们可以删除单参数方法的句点和括号   类似地,可以在没有参数的情况下调用不带参数的方法   期。这称为“后缀”表示法。但是,使用这个   后缀约定有时会令人困惑,所以Scala 2.10就可以了   一个可选功能。

后缀示例

1 toString

中缀的例子

private def testMethod(arg1: String): String = {
    arg1
  }
//this specifies current instance
println(this testMethod "Hello Scala")