加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:39:58 所属栏目:安全 来源:网络整理
导读:我想在scala singleton类中定义一个私有方法,看起来像; private def createDomNode(tag: String,attrs: Map[String,String]): DomNode {} DomNode是Java类型,不是scala类型。 attrs是scala Map,key和value都是String类型。 但上面给出错误。什么是正确的
我想在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也是如此。而正是因为我在开头写道:

if you define it within object,class or trait definition

对不起,我需要更清楚这一点,并在我的第二次更新中更详细地描述它。

我看了Scala规格。当我说myInnerFn是函数的语法糖时,似乎我并不完全正确。但似乎它被称为方法类型。您可以在规范第3.3.1节中找到方法类型:

http://www.scala-lang.org/docu/files/ScalaReference.pdf

希望它会给你一些线索,如果你想深入了解这一点。我认为很容易迷失在术语上。您可以在2个上下文中运行。首先我们有

函数 – 返回一些值
> Procedure – 返回值(或在Scala上下文中返回Unit)

而在第二个上下文中:

>函数 – 可执行代码段,可以传递并视为值
>方法 – 属于类

而且在什么情况下有时不清楚它的含义。例如,我可以告诉你,myMethod是作为函数,因为它具有返回值(或换句话说:myMethod它不是过程)。我相信在书中也是一样的。

还有一件事。 Scala中编程的8.1,8.2,8.3节可以帮助您了解此术语。如果我在我的假设中是正确的,那么你认为功能在书中被称为一级函数(在第8.3节中描述)。

希望这可以帮助

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读