scala定义像ruby-way的函数

时间:2015-03-09 15:56:10

标签: ruby scala

在ruby中,您可以调用以下代码在控制台中打印"foo"

p "foo"

puts "foo"

并打印"foo"。在scala中,我创建了这个函数:

def p(forPrint: Any): Unit = {
  println(forPrint)
}

但需要像p("foo")一样调用它。我怎么写:

puts "foo"

并使用这种语法在scala中打印?

或者,就像Array.map{} equal Array map{}

一样 我能

吗?
"foo" p equal println("foo")

2 个答案:

答案 0 :(得分:2)

鉴于此方法:

def p(forPrint: Any): Unit = println(forPrint)

Scala无法像这样调用它:

p "foo"

从对象调用方法时,只能省略括号。例如:

scala> println "foo" // doesn't work
<console>:1: error: ';' expected but string literal found.
       println "foo"
               ^

scala> Console println "foo" // does work
foo

在您的示例的上下文中,您可以将p放在对象中:

object Test {
   def p(forPrint: Any): Unit = println(forPrint)
}

Test p "foo"

您可以拨打array toList而不是array.toList的原因是array是一个对象,方法toListp是一个带有参数"foo"的方法,如果没有明确引用对象,则不允许这样做。

答案 1 :(得分:1)

与其他编程语言相比,Ruby对括号的强制执行 lax,因此它的语法非常稀疏。这就是为什么它通常是编写配置文件的首选语言,表达方式并不多。

技术上p(x)相当于Ruby中的p x,但在其他语言中却不是这样。

据我所知,you can't do this in Scala因为意思不同。

通常试图强迫一种语言表现得像另一种语言一样,会产生许多不必要的混淆。我尽可能地使用Scala方式。