- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 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
中定义它的话。 , class
或trait
定义。函数语法如下所示:
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
ortrait
definition
抱歉,我需要更清楚地了解这一点,并在第二次更新中更详细地描述它。
<小时/>我查看了 Scala 规范。看来我说的并不完全正确myInnerFn
是函数的语法糖。但似乎它被称为方法类型。您可以在规范部分3.3.1方法类型中找到它:
http://www.scala-lang.org/docu/files/ScalaReference.pdf
如果您想更深入地了解这一点,希望它能为您提供一些线索。我认为很容易迷失在术语中。您可以function
在2种情况下。首先我们有
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/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!