Scala apply()如何处理trait的同伴对象?
考虑以下代码:Scala apply()如何处理trait的同伴对象?,scala,Scala,考虑以下代码: object Rough extends App { trait Sample object Sample { def apply[String](body: => String): java.lang.String = { "Hello " + body } } val s: String = Sample { "World" } print(s) } 在代码中,当我能够理解正在调用apply时。但我无法理
object Rough extends App {
trait Sample
object Sample {
def apply[String](body: => String): java.lang.String = {
"Hello " + body
}
}
val s: String = Sample {
"World"
}
print(s)
}
在代码中,当我能够理解正在调用apply时。但我无法理解:
Sample{“World”}
?它被称为什么以及如何调用apply()
apply()
中的body:=>String
是什么意思?如果正文:
和=>
之间没有空格,为什么会给我一个错误java.lang.String
作为返回,而不仅仅是String
这个语法是什么意思:示例{“世界”}?它被称为什么以及如何调用apply()? =>它是Scala编译器将
Sample(“World”)
或Sample{“World”}
转换为Sample.apply(“World”)
的。例如:当你创建一个列表时
val list = List(1,2,3)
编译器实际上将其转换为List.apply(1,2,3)
apply()中的body:=>字符串是什么意思?如果body:and=>之间没有空格,为什么会出现错误?
=>这是scala中callbyname
参数的一个示例。这里,body
是callbyname
参数。这些参数的语法必须在:和=>
之间留出一个空格。有关更多信息,请参见
为什么它要求我键入java.lang.String作为返回,而不仅仅是字符串?
=>首先,您需要清楚scala中的字符串是java.lang.String
的别名。如果您在scala.Predef
中看到,您会发现:
type String = java.lang.String
因此,我们实际上一直在scala中使用相同的java.lang.String
其次,在应用方法中:
def apply[String](body: => String)
apply[String]
没有使用scala字符串
,而是使用了类型参数
。我的意思是,您也可以将应用方法写为:
def apply[T](body: => T):java.lang.String
它也会以同样的方式工作。这个语法是什么意思:Sample{“World”}?它被称为什么以及如何调用apply()?
=>它是Scala编译器将Sample(“World”)
或Sample{“World”}
转换为Sample.apply(“World”)
的。例如:当你创建一个列表时
val list = List(1,2,3)
编译器实际上将其转换为List.apply(1,2,3)
apply()中的body:=>字符串是什么意思?如果body:and=>之间没有空格,为什么会出现错误?
=>这是scala中callbyname
参数的一个示例。这里,body
是callbyname
参数。这些参数的语法必须在:和=>
之间留出一个空格。有关更多信息,请参见
为什么它要求我键入java.lang.String作为返回,而不仅仅是字符串?
=>首先,您需要清楚scala中的字符串是java.lang.String
的别名。如果您在scala.Predef
中看到,您会发现:
type String = java.lang.String
因此,我们实际上一直在scala中使用相同的java.lang.String
其次,在应用方法中:
def apply[String](body: => String)
apply[String]
没有使用scala字符串
,而是使用了类型参数
。我的意思是,您也可以将应用方法写为:
def apply[T](body: => T):java.lang.String
它也会以同样的方式工作。非常感谢您为我的问题提供了准确而简洁的答案!非常感谢您对我的问题给出了准确而简洁的答案!