我想在scala单例类中定义一个看起来像的私有方法;
private def createDomNode(tag: String, attrs: Map[String , String]): DomNode {
}
Run Code Online (Sandbox Code Playgroud)
DomNode是Java类型,而不是scala类型.attrs是scala Map,其键和值都是String类型.
但上面给出了错误.什么是正确的格式?
谢谢Easy Angel的答案.仍有一些困惑.根据该语言的发明者编写的Scala编程书,下面是一个函数:
def max(x: Int, y: Int): Int = {
if (x > y) x
else y
}
Run Code Online (Sandbox Code Playgroud)
但是你的回答是它是方法而不是功能.你能解释一下吗?
什么是REPL?
ten*_*shi 47
你应该把=:
private def createDomNode(tag: String, attrs: Map[String , String]): DomNode = {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果你不介绍=方法签名和正文,那么返回类型是Unit,所以这个:
def m(i: Int) {}
Run Code Online (Sandbox Code Playgroud)
是相同的
def m(i: Int): Unit = {}
Run Code Online (Sandbox Code Playgroud)
回应评论:我刚才描述的实际上是方法,如果您在定义它object,class或trait定义.函数语法如下所示:
val createDomNode: (String, Map[String , String]) => DomNode = { (tag, attrs) =>
// ...
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我定义val了createDomNode函数类型的名称.它也可以写成:
val createDomNode: Function2[String, Map[String , String], DomNode] = { (tag, attrs) =>
// ...
}
Run Code Online (Sandbox Code Playgroud)
这是另一个例子.在这种情况下,我定义了每次调用它时生成新函数的方法:
def createDomNode = (tag: String, attrs: Map[String , String]) => new DomNode
Run Code Online (Sandbox Code Playgroud)
但重要的是要明白,DomNode在这种情况下,该方法返回一个"返回的函数",但不是DomNode它本身.
关于Scala参考中的编程.我想你在谈论第2章 - 第3步(在介绍中)
正如您所看到的,max函数在REPL中定义,它确实起作用.其实你也可以写这样的东西:
class MyClass {
def myMethod(i: Int): Int = {
def myInnerFn(x: Int) = x * x
myInnerFn(i)
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下myMethod,方法和myInnerFn功能.如您所见,它在很大程度上取决于上下文.我相信这种语法myInnerFn只是语法糖(我需要查看规范才能确定):
val myInnerFn = (x: Int) => x * x
Run Code Online (Sandbox Code Playgroud)
REPL也是如此.顺便说一句,因为我在开头写道:
如果您在定义它
object,class或trait定义
对不起,我需要更清楚这一点,并在第二次更新中更详细地描述它.
我查看了Scala规范.当我说这myInnerFn是函数的语法糖时,似乎我并不完全正确.但似乎它被称为方法类型.您可以在规范3.3.1方法类型中找到它:
http://www.scala-lang.org/docu/files/ScalaReference.pdf
希望它会给你一些线索,如果你想深入了解这一点.我认为很容易迷失在术语中.你可以function在2个上下文中.首先我们有
Unit)在第二个背景下:
它有时不清楚它在何种背景下.例如,我可以告诉你,这myMethod只是因为它具有返回值(或换句话说:myMethod它不是过程).我相信书中的情况也是如此.
还有一件事.第8.1,8.2,8.3,从在Scala编程可以帮助你理解这个术语.如果我在我的假设中是正确的,那么您认为书中Function所称First-class function的内容(在8.3节中描述).
希望这可以帮助