在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")
答案 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
是一个对象,方法toList
。 p
是一个带有参数"foo"
的方法,如果没有明确引用对象,则不允许这样做。
答案 1 :(得分:1)
与其他编程语言相比,Ruby对括号的强制执行极 lax,因此它的语法非常稀疏。这就是为什么它通常是编写配置文件的首选语言,表达方式并不多。
技术上p(x)
相当于Ruby中的p x
,但在其他语言中却不是这样。
据我所知,you can't do this in Scala因为意思不同。
通常试图强迫一种语言表现得像另一种语言一样,会产生许多不必要的混淆。我尽可能地使用Scala方式。