如何在Scala中定义返回类型的方法?
我想在scala singleton类中定义一个私有方法,看起来像;
private def createDomNode(tag: String,attrs: Map[String,String]): DomNode { } DomNode是Java类型,不是scala类型。 attrs是scala Map,key和value都是String类型。 但上面给出错误。什么是正确的格式? 感谢Easy Angel的答案。还有一些混乱。根据Scala编写的书籍由发明人撰写的语言,下面是一个功能: def max(x: Int,y: Int): Int = { if (x > y) x else y } 但你的答案说这是方法而不是功能。你能解释一下吗 什么是REPL? 解决方法
你应该把= =
private def createDomNode(tag: String,String]): DomNode = { // ... } 如果你不会在方法签名和body之间放置=,那么返回类型是Unit,所以这样: def m(i: Int) {} 是相同的 def m(i: Int): Unit = {} 对评论的回应:我之前描述的是实际的方法,如果你在对象,类或特征定义中定义它。函数语法将如下所示: val createDomNode: (String,Map[String,String]) => DomNode = { (tag,attrs) => // ... } 正如你可以看到我用名称为createDomNode的函数类型定义val。它也可以写成: val createDomNode: Function2[String,String],DomNode] = { (tag,attrs) => // ... } 这里是另一个例子。在这种情况下,我定义在每次调用它时生成新函数的方法: def createDomNode = (tag: String,String]) => new DomNode 但重要的是要理解,在这种情况下,该方法返回一个“返回DomNode的函数”,而不返回DomNode本身。 关于Scala参考中的编程。我想你在谈论第2章 – 第3步(在介绍中) 正如你可以看到最大功能在REPL中定义,它真的是功能。其实你也可以这样写: class MyClass { def myMethod(i: Int): Int = { def myInnerFn(x: Int) = x * x myInnerFn(i) } } 在这种情况下myMethod是方法,myInnerFn是函数。所以你可以看到,它高度依赖于上下文。我相信myInnerFn的这个语法只是语法糖(为了说明我需要查看规范): val myInnerFn = (x: Int) => x * x REPL也是如此。而正是因为我在开头写道:
对不起,我需要更清楚这一点,并在我的第二次更新中更详细地描述它。 我看了Scala规格。当我说myInnerFn是函数的语法糖时,似乎我并不完全正确。但似乎它被称为方法类型。您可以在规范第3.3.1节中找到方法类型: http://www.scala-lang.org/docu/files/ScalaReference.pdf 希望它会给你一些线索,如果你想深入了解这一点。我认为很容易迷失在术语上。您可以在2个上下文中运行。首先我们有 函数 – 返回一些值 而在第二个上下文中: >函数 – 可执行代码段,可以传递并视为值 而且在什么情况下有时不清楚它的含义。例如,我可以告诉你,myMethod是作为函数,因为它具有返回值(或换句话说:myMethod它不是过程)。我相信在书中也是一样的。 还有一件事。 Scala中编程的8.1,8.2,8.3节可以帮助您了解此术语。如果我在我的假设中是正确的,那么你认为功能在书中被称为一级函数(在第8.3节中描述)。 希望这可以帮助 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |