gpt4 book ai didi

scala - 如何在 Scala 中定义返回 Java 对象的方法?

转载 作者:行者123 更新时间:2023-12-03 04:57:58 25 4
gpt4 key购买 nike

我想在 scala 单例类中定义一个私有(private)方法,如下所示:

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 中定义它的话。 , classtrait定义。函数语法如下所示:

val createDomNode: (String, Map[String , String]) => DomNode = { (tag, attrs) =>
// ...
}

正如你所看到的,我定义了 val姓名 createDomNode的函数类型。也可以写成:

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 步(在简介中)

如您所见max function 是在 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

如果您想更深入地了解这一点,希望它能为您提供一些线索。我认为很容易迷失在术语中。您可以function在2种情况下。首先我们有

  • 函数 - 返回一些值
  • 过程 - 不返回任何值(或者在 Scala 上下文中返回 Unit )

在第二个上下文中:

  • 函数 - 可以传递并被视为值的可执行代码段
  • 方法 - 属于该类

有时并不清楚它的含义。例如我可以告诉你myMethod之所以是函数,只是因为它有返回值(或者换句话说: myMethod 它不是过程)。我相信书上的情况是一样的。

<小时/>

还有一件事。 《Scala 编程》中的第 8.1、8.2、8.3 节可以帮助您理解这个术语。如果我的假设是正确的,你认为 Function称为 First-class function书中有介绍(第 8.3 节中有描述)。

希望这有帮助

关于scala - 如何在 Scala 中定义返回 Java 对象的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com