Scala中涉及抽象类型时没有动态绑定?

2023-12-20

当我在 Martin Odersky 的抽象类型中尝试动物/食品示例时Scala 编程,

class Food
abstract class Animal {
  type SuitableFood <: Food
  def eat(food:SuitableFood)
}
class Grass extends Food
class Cow extends Animal {
  type SuitableFood=Grass
  override def eat(food:SuitableFood) {}
}
val bessy:Animal = new Cow
bessy.eat(new Grass)

我收到以下错误:

scala> <console>:13: error: type mismatch;
 found   : Grass
 required: bessy.SuitableFood
                  bessy.eat(new Grass)
                            ^

马丁最初的例子是bessy.eat(new Fish),这肯定会失败,但我没想到它会失败Grass以及。通过让bessy be Cow代替Animal: val bessy:Cow = new Cow.

这是否意味着动态绑定在这里不起作用?

Edited:Scala 中常规继承的简单动态绑定:

abstract class Parent {
  def sig:String = "Parent"
}
class Child extends Parent {
  override def sig:String = "Child"
}

我有这个,在哪里x:Parent gave Child还有:

scala> new Child().sig
res1: String = Child

val x:Parent = new Child()
x: Parent = Child@3a460b07

x.sig
res2: String = Child

Scala 是静态类型的。任意动物不能吃草,而您刚刚尝试给任意动物喂草。它恰好是一头牛,但你已经说过(与: Animal)编译器可能只假设它是一种动物。

如果你让编译器知道bessy is a Cow (val bessy = new Cow),然后她就可以吃草了。

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

Scala中涉及抽象类型时没有动态绑定? 的相关文章

随机推荐

  • Strcmp 在 -fsanitize=address 下返回不同的结果

    我正在使用 gcc SUSE Linux 7 2 1 20171020 编译以下 C 程序 strcmp c include
  • Firefox webdriver 始终打开首次运行页面

    如何为 FF 彻底禁用此 首次运行 页面 创建 FF 驱动程序后 它会打开选 项卡 https www mozilla org en US firefox 42 0 firstrun learnmore https www mozilla
  • java.util.Date 生成了错误的日期?

    这是我的代码 java util Date TODAY new java util Date SimpleDateFormat SDF new SimpleDateFormat YYYY MM DD System out println S
  • Google 地图 Android API v2 检测地图上的长按并添加标记不起作用

    我想长按在地图上添加标记 Toast in onMapClick 通过正常点击即可显示 但长按不起作用 Toast in onMapLongClick 长按不显示 地图上也不显示标记 我在用着SupportMapFragment因为我想在
  • Scala:接收服务器发送的事件

    Set up 我正在开发的一个项目有一个带有 HTTP 接口的发布 订阅服务器 订阅通过接受服务器发送的事件来工作 curl X GET server port topics news 每当消息发布到给定主题 URL 时就会推送该消息 cu
  • Python 列表方法append 和extend 有什么区别?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 列表方法有什么区别append and extend append https docs
  • 如何使用ffmpeg使html5 webm视频平滑滚动

    我使用了示例代码https codepen io ollieRogers pen lfeLc https codepen io ollieRogers pen lfeLc当用户滚动页面时显示 背景 视频的帧 示例中使用的 webm 视频在我
  • Blazor - 全局对象 - 使用 SessionStorage?

    我有一个 Blazor 应用程序 包含多个页面和组件等 我需要在页面和组件之间保留并传递全局对象 举例来说 一个将在页面之间读取和更新的 CUSTOMER 对象 做这个的最好方式是什么 使用会话存储 https learn microsof
  • 如何在 IntelliJ IDEA 中创建补丁?

    在使用 Eclipse 多年之后 我已经使用 IntelliJ IDEA 9 0 Community Edition 一段时间了 似乎很难在其中找到一件事 我想在我的项目中的某些子文件夹上创建补丁 在 Eclipse 中 可以使用右键单击
  • 为什么 GCC 发出“lea”而不是“sub”来进行减法?

    我正在查看一些通过反汇编一些 C 程序生成的程序集 我对经常重复看到的单个优化感到困惑 当我没有对 GCC 编译器进行优化时 使用subl减法指令 但是当我打开优化时 O3准确地说 编译器使用leal指令而不是减法 示例如下 没有优化 83
  • 从 HttpInterceptor 中的 catchError 返回可观察到的捕获错误会导致错误循环

    我有一个简单的拦截器 可以处理请求并使用 RXJS catchError 捕获任何 http 错误 catchError 中收到的第二个参数是捕获的可观察值 在某些情况下 我想返回此错误并让它传播到订阅函数中的错误处理程序 问题是返回捕获的
  • mingw ld 找不到搜索路径中存在的某些库

    我用的是vim mingw 不知何故 终端还是window命令 所以我用谷歌搜索 并使用mintty 但是当运行 vim 时 它会永远挂起 直到我输入 C c i find 这一页 https code google com p mintt
  • 在 GCC 4.8 上构建 Python (2.7) 模块失败

    我正在尝试使用 C API 构建 Python 模块 扩展写入 但失败了 python2 cmath py build running build running build ext building c math extension cr
  • DataGridView 未在 C# 中更新[重复]

    这个问题在这里已经有答案了 有人能解释一下发生了什么吗 将代码 1 更改为代码 2 可以解决问题 尽管理论上应该没有区别 理论撞击实践就像南瓜撞击砖墙 Code 1 OutputDataGridView DataSource myList
  • 不等待 AJAX 请求的响应

    假设我从 jQuery 向后端 PHP 脚本发出 AJAX HTTP 请求 发出请求后 PHP 脚本开始运行并发挥其魔力 假设我随后更改为另一个网站 远离发出原始 AJAX 请求的网站 同样 我在 PHP 脚本完成之前执行此操作 并且有时间
  • 查找两个已排序数组的前 k 个和

    给定两个已排序的数组 大小分别为 n 和 m 你的任务 如果你选择接受它 是输出以下形式的最大 k 和a i b j O k log k 解决方案可以在这里找到 http www ocf berkeley edu wwu cgi bin y
  • 获取附件的 url

    我正在使用 CouchApp 构建一个简单的 Web 应用程序 允许上传和管理图片 实际的图像文件作为文档的附件存储 如下所示 id 09fe82d75a26f9aa5e722d6b220180d2 rev 2 5797b822c83b9d
  • 如何在 sed 的命令中使用变量?

    I have abc sh exec ROOT Subsystem xyz sh 在 Unix 机器上 如果我打印echo HOME然后我得到 HOME COM FILE 我想更换 ROOT with HOME使用 sed 预期输出 exe
  • iPhone:禁用“双击空格键。”捷径?

    默认情况下 如果您在 iPhone 或 iPad 上点击空格键两次 则不会得到 两个空格 而是得到 句点后跟一个空格 有什么方法可以在代码中禁用此快捷方式吗 更新 通过 UITextInputTraits 禁用自动更正不起作用 更新2 明白
  • Scala中涉及抽象类型时没有动态绑定?

    当我在 Martin Odersky 的抽象类型中尝试动物 食品示例时Scala 编程 class Food abstract class Animal type SuitableFood lt Food def eat food Suit