2016-10-25 4 views
1

Если я удалю круглые скобки снизу, чтобы прочитать printFn hc Я получаю сообщение об ошибке. Я думал, что в Scala для одного параметра функции не нужны парнеры?Одна функция параметра

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 */ 
    } 
} 

ответ

4

Я думаю, вы смешивали его с infix method notation. В Scala вы можете написать либо obj.method(argument), либо obj method argument.

Чтобы применить это к вашему примеру, вам нужно «obj» часть выражения, так что если вы хотите, чтобы избежать скобки, вы можете написать

this printFn hc 

Смотрите также "When to use parenthesis in Scala infix notation".

1

Я хотел бы добавить что-то о суффикса в другой ответ, охватываемого о инфиксную .Copied из Programming Scala

Итак, 1 + 2 так же, как 1 +. (2), из-за обозначение «инфикс», где мы можем отбросить период и круглые скобки для методов с одним аргументом.1 Аналогично, метод без аргументов может быть вызван без периода . Это называется «постфиксной» нотации. Однако использование этого постконфигурного соглашения может иногда вводить в заблуждение, поэтому Scala 2.10 сделал его дополнительной функцией.

Пример для Postfix

1 toString 

Пример для Infix

private def testMethod(arg1: String): String = { 
    arg1 
    } 
//this specifies current instance 
println(this testMethod "Hello Scala") 
Смежные вопросы