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

2024-03-24

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

private def  createDomNode(tag: String, attrs: Map[String , String]): DomNode  {

}

DomNode 是 Java 类型,而不是 scala 类型。 attrs 是 scala Map,键和值都是 String 类型。

但上面给出了错误。正确的格式是什么?

感谢易天使的解答。仍然有些混乱。根据该语言的发明者所写的《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 or 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 itself.


关于 Scala 编程参考。我想你正在谈论第 2 章 - 步骤 3(简介)

如你看到的maxfunction 是在 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 中也会发生同样的情况。顺便说一句,这是因为我在开头写道:

如果你定义它在object, class or trait定义

抱歉,我需要更清楚地了解这一点,并在第二次更新中更详细地描述它。


我查看了 Scala 规范。看来我这么说并不完全正确myInnerFn是函数的语法糖。但似乎它被称为方法类型。您可以在规格部分找到它3.3.1 方法类型:

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

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

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

在第二种情况下:

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

有时并不清楚它在什么上下文中意味着什么。例如我可以告诉你myMethod之所以是函数只是因为它有返回值(或者换句话说:myMethod这不是程序)。我相信书上的情况是一样的。


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

希望这可以帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Scala 中定义返回 Java 对象的方法? 的相关文章

  • Scala 中的类型类解析如何工作?

    我有一个带有类型参数的函数 我想知道该类型参数是否是一个Option或不 我读过一些博文 即this one http danielwestheide com blog 2013 02 06 the neophytes guide to s
  • Scala 对大数的阶乘有时会崩溃,有时不会

    以下程序经过编译和测试 有时返回结果 有时充满屏幕 java lang StackOverflowError at scala BigInt apply BigInt scala 47 at scala BigInt equals BigI
  • 如何从命令行运行scala文件?

    scala是否支持scala run xxx scala go语言支持这样运行 go my go 并且Python支持 python my py 但看来 scala xxx scala 仅进行语法检查 未观察到任何输出或运行行为 那么有没有
  • 在 case 语句中间使用 unapply 的对象

    scala gt object Test def unapply L R v L R Some v defined object Test scala gt 1 2 match case 1 Test 2 gt println First
  • 如何在Scala中实现尾递归快速排序

    我写了一个递归版本 def quickSort T xs List T p T T gt Boolean List T xs match case Nil gt Nil case gt val x xs head val left righ
  • 从继承的受保护 Java 字段创建公共访问器

    我怎样才能完成以下工作 class Foo extends javax swing undo UndoManager increase visibility works for method override def editToBeUnd
  • 解析嵌套括号内包含的值

    我只是在开玩笑 奇怪地发现在简单的递归函数中解析嵌套括号有点棘手 例如 如果程序的目的是查找用户详细信息 它可能来自 name surname age to Bob Builder age 然后到Bob Builder 20 这是一个用于在
  • scala 中 'Array[Int]' 隐式转换为 'Int => Int' 的地方在哪里?

    这是一个问题this https stackoverflow com questions 70000384 why val arr int int array1 2 3 is allowed in scala 现在我们已经证明了Array
  • .java 和 .scala 类之间是否可能存在循环依赖?

    假设我在 java 文件中定义了类 A 在 scala 文件中定义了类 B A 类使用 B 类 B 类使用 A 类 如果我使用 java 编译器 则会出现编译错误 因为 B 类尚未编译 如果我使用scala编译器A类将找不到 有没有可以同时
  • Scala repl 抛出错误

    当我打字时scala在终端上启动 repl 它会抛出此错误 scala gt init error error while loading AnnotatedElement class file usr lib jvm java 8 ora
  • 覆盖 Predef 的隐式转换

    我有多个返回 java lang Integer 的方法 然后使用 Scala 的 Predef 隐式转换将其隐式转换为 Int 下面是它的编写方式there https github com scala scala blob v2 11
  • Scala 中抛出异常,什么是“官方规则”

    我正在 Coursera 上学习 Scala 课程 我也开始阅读 Odersky 的 Scala 书 我经常听到的是 在函数式语言中抛出异常不是一个好主意 因为它破坏了控制流 并且我们通常返回一个失败或成功的 Either Scala 2
  • Haskell scala 互操作性

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • 如何以最佳方式传递元组参数?

    如何以最佳方式传递元组参数 Example def foo Int Int def bar a Int b Int 现在我想传递的输出foo to bar 这可以通过以下方式实现 val fooResult foo bar fooResul
  • 如何从命令行向 REPL 添加导入?

    如何使 REPL 导入命令行中给出的包 Sample scala someMagicHere import sys error scala gt imports 1 import scala Predef 162 terms 78 are
  • Scala:如何将可变参数指定为类型?

    代替 def foo configuration String String 我希望能够写 type Configuration String String def foo configuration Configuration 主要用例是
  • Akka Stream Graph 恢复问题

    我创建了一个图表来并行化具有相同输入的两个流 这些流产生 Future Option Entity 如果 flowA 失败 我想返回 Future None 但恢复似乎没有被调用 val graph Flow Input Future Op
  • 可选择将项目添加到 Scala 映射

    我正在寻找这个问题的惯用解决方案 我正在构建一个valScala 不可变 Map 并希望有选择地添加一项或多项 val aMap Map key1 gt value1 key2 gt value2 if condition key3 gt
  • 在 Spark MLlib 上使用 Java 中的 Breeze

    在尝试从Java使用MLlib时 使用微风矩阵运算的正确方法是什么 例如scala 中的乘法很简单 matrix vector 相应的功能在Java中是如何表达的 有一些方法 例如 colon times 可以通过正确的方式调用 breez
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes

随机推荐

  • 更改 DecimalFormat 区域设置

    我有定制DecimalFormat在 Edittext 的 addTextChangedListener 方法中 一切工作正常 但是当我更改语言 区域设置 时 我的 addTextChangedListener 不起作用 double an
  • 如何等待异步函数?

    My case let waiting function return new Promise resolve gt console log awaiting setTimeout function resolve 1000 let wai
  • Clang 可以使用 GCC 编译的 .a 库来编译代码吗?

    我的项目目前在 gcc 下编译 它使用Boost ZeroMQ作为静态 a图书馆和一些 so像 SDL 这样的库 我想一路叮当响 但不是现在 我想知道是否可以编译使用的代码 a and so在 gcc 下用 clang 编译的库 是的 就是
  • 如何从 Node.js 打开终端应用程序?

    我希望能够打开Vim从终端中运行的node js程序中 创建一些内容 保存并退出Vim 然后抓取文件的内容 我正在尝试做这样的事情 filename tmp tmpfile process pid editor process env ED
  • 动态将 RewriteBase 设置为当前文件夹路径

    有没有办法将 RewriteBase 设置为相对于主机根目录的当前文件夹 htaccess 文件所在的文件夹 的路径 我有一个 CMS 如果我将其移动到主机中的目录 它将无法工作 除非我将 RewriteBase 设置为相对于主机根目录的目
  • 具有不同行布局的游标适配器

    我正在尝试创建一个自定义光标适配器 它将根据光标中的某些数据使用两种不同的布局 我一直在阅读 重写 getViewTypeCount 和 getItemViewType 来实现这一点 但我似乎不知道如何实现这一点 这是我的 bindView
  • 在 pandas 数据帧中插入多索引

    我需要插入多索引数据帧 例如 这是主要数据框 a b c result 1 1 1 6 1 1 2 9 1 2 1 8 1 2 2 11 2 1 1 7 2 1 2 10 2 2 1 9 2 2 2 12 我需要找到以下结果 1 3 1 7
  • 缺少 Ionic 网络本机插件的提供程序

    我尝试过使用 Ionics 本机插件 Network 但由于据称缺少提供程序而失败 为了避免任何错误 我全新安装了 Ionic 和所需的依赖项 ionic cordova plugin add cordova plugin network
  • Glassfish 3.1.2 和 Eclipse

    我刚刚下载了 Glassfish 版本 3 1 2 这还不是正式版本 我需要这个版本 因为我的 Web 应用程序正在使用 websockets 我现在遇到的问题是 Eclipse 的 Glassfish 插件 他无法识别新的 Glassfi
  • 什么可能导致作业无法完成?

    我正在使用 C 开发一个项目 由于某种原因 当我尝试为枚举变量赋值时 分配不会发生 我会复制我的代码 但这实际上只是一个简单的作业 它是这样的 testVar MyEnum TYPE OF ENUM where testVar属于类型MyE
  • Scrapy从div中获取href

    我开始在一个小项目中使用Scrapy 但无法提取链接 每次找到该类时 我只得到 而不是 url 我错过了一些明显的东西吗 sel Selector response for entry in sel xpath div class reci
  • 如何根据

    所以我想做的是根据 div 元素的高度更改它的颜色 例如 如果 div 的高度 我只想使用 css 来实现这一点 如果可能的话 这是一个你可以信赖的渐变背景技巧background size并重复 这个想法是要么具有负的大小值 无着色 要么
  • IE,CSS:如何删除单击按钮时出现的突出显示

    在IE中看一下这个页面 我有最新版本 但在旧版本中也会发生这种情况 http tinuska vibraflex cz http tinuska vibraflex cz 在上面的链接中 页面底部有两个圆形按钮 单击该按钮时 按钮周围会出现
  • 如何在 Windows 上为 PyCharm 配置 Python Kivy?

    我在让 Kivy 在 Windows 7 上与 PyCharm 配合使用时遇到问题 我已成功通过 文件 gt 设置 gt Python 解释器 gt 路径 选项卡添加了大部分外部库 我使用的是 Kivy 版本的 Python 当我运行一个
  • 没有已知的从指针到引用到指针的转换

    我遇到以下 g 错误 Menu hpp 66 41 error no matching function for call to Menu Stack
  • C++ 中的免费分析? [复制]

    这个问题在这里已经有答案了 可能的重复 您最喜欢的分析工具是什么 针对 C https stackoverflow com questions 26663 whats your favorite profiling tool for c 在
  • 有没有办法使用 css3 calc 在屏幕中央放置一个对话框?

    我正在尝试使用以下内容 div class center div CSS center position absolute height 50px width 50px background red top calc 50 50px 2 l
  • 如何使用 Bitmap.getBitmapResource() 访问存储在 Blackberry 中的图像?

    我想访问存储在黑莓中的图像 例如位置 store home user image png 现在我可以访问这个图像 String filePath file store home user image png Bitmap image Bit
  • Swift 包管理器和 Xcode:保留 Xcode 设置?

    我正在使用 Swift 开发服务器并使用 Swift 包管理器 当我在 Mac OS 系统上进行开发时 发现它很方便生成 Xcode 项目以使用 Xcode 作为我的 IDE 即 有时 我的包依赖项必须更新 我一直在使用swift pack
  • 如何在 Scala 中定义返回 Java 对象的方法?

    我想在 scala 单例类中定义一个私有方法 如下所示 private def createDomNode tag String attrs Map String String DomNode DomNode 是 Java 类型 而不是 s