如何在Scala中定义一个返回类型的方法?

| 我想在scala单例类中定义一个私有方法,如下所示:
private def  createDomNode(tag: String, attrs: Map[String , String]): DomNode  {

}
DomNode是Java类型,而不是scala类型。 attrs是scala Map,其键和值均为String类型。 但是上面给出了错误。正确的格式是什么? 感谢Easy Angel的回答。仍然有些混乱。根据该语言的发明者编写的《 Scala中的编程》一书,以下是一个函数:
def max(x: Int, y: Int): Int = {
  if (x > y) x
  else y
}
但是您的答案说这是方法而不是功能。你能解释一下吗? 什么是REPL?     
已邀请:
        您只需输入
=
private def createDomNode(tag: String, attrs: Map[String , String]): DomNode = {
    // ...
}
如果您不会在方法签名和主体之间放置
=
,则返回类型为
Unit
,因此:
def m(i: Int) {}
是相同的
def m(i: Int): Unit = {}
对评论的回应:如果您在
object
class
trait
定义内定义它,那么我先前描述的实际上是方法。函数语法如下所示:
val createDomNode: (String, Map[String , String]) => DomNode = { (tag, attrs) =>
    // ...
}
如您所见,我以函数类型的名称
createDomNode
定义了
val
。它也可以这样写:
val createDomNode: Function2[String, Map[String , String], DomNode] = { (tag, attrs) =>
    // ...
}
这是另一个例子。在这种情况下,我定义了每次调用时都会生成新函数的方法:
def createDomNode = (tag: String, attrs: Map[String , String]) => new DomNode
但重要的是要理解,在这种情况下,该方法返回一个“返回
DomNode
\”的函数,而不返回
DomNode
本身。 关于Scala中的编程参考。我认为您是在谈论第2章-第3步(在简介中) 如您所见,REPL中定义了
max
函数,它确实是函数。实际上,您也可以这样写:
class MyClass {
    def myMethod(i: Int): Int = {
        def myInnerFn(x: Int) = x * x

        myInnerFn(i)
    }
}
在这种情况下,方法是
myMethod
,功能是
myInnerFn
。如您所见,它高度依赖于上下文。我相信
myInnerFn
的语法只是它的语法糖(我需要仔细阅读spec才能确定):
val myInnerFn = (x: Int) => x * x
在REPL中也是如此。顺便说一下,这是因为我在一开始就写道:   如果您在
object
class
trait
定义内定义 抱歉,我需要对此更加清楚,并在第二次更新中对其进行更详细的描述。 我看着Scala规格。当我说ѭ21是该函数的语法糖时,似乎我并不完全正确。但似乎将其称为“方法类型”。您可以在规范部分3.3.1方法类型中找到它: http://www.scala-lang.org/docu/files/ScalaReference.pdf 如果您想深入了解这一点,希望它将为您提供一些线索。我认为很容易迷失术语。您可以在2种情况下
function
。首先我们有 函数-返回一些值 过程-不返回任何值(或在Scala上下文中返回
Unit
) 在第二种情况下: 功能-可以传递并视为值的可执行代码段 方法-属于此类 有时在什么上下文中不清楚。例如,我可以告诉您
myMethod
是函数,只是因为它具有返回值(或换句话说:
myMethod
它不是过程)。我相信书中也是这样。 还有一件事。 Scala编程中的8.1、8.2、8.3节可以帮助您理解此术语。如果我的假设是正确的,那么您在书中所称的
Function
在书中称为called33ѭ(在第8.3节中进行了介绍)。 希望这可以帮助     

要回复问题请先登录注册