问题标签 [dynamic-dispatch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 此示例代码 4-6 dynamic_dispatch.py 启动服务器并快速将其关闭。
这应该在端口 10310 上创建一个日历服务器。遗憾的是,代码运行并快速退出,没有错误。可能是什么问题?根据我正在阅读的扭曲的 O'reily 书,我应该能够访问 localhost:10310/2013 并查看一个小日历。
感谢您的任何反馈。
swift - 在 DecodingError 中采用 CustomNSError
我正在使用 Crashlytics 编写错误记录器,但遇到了一个问题,这让我质疑我对协议和动态调度的理解。
使用 Crashlytics 记录非致命错误时,API 需要一个符合错误的对象和一个可选的用户信息字典。我目前正在查看 JSON 解码错误,当我刚刚在 recordError 中发送 DecodingError 时,我对在 Crashlytics 仪表板中看到的内容不太满意。所以我的解决方案是为 DecodingError 编写一个扩展,采用 CustomNSError 来提供一些更详细的信息,以帮助将来进行调试:
我在记录器中编写了一个方法,如下所示:
我在这里发送错误:
但是传递给 log(_error:) 的对象不是我对 CustomNSError 的实现,它看起来像带有 NSCocoaErrorDomain 的标准 NSError。
我希望这足以解释我的意思,不知道为什么传递给日志的对象没有我在 DecodingError 的扩展中设置的值。我知道我可以轻松地在调用 Crashlytics 时单独发送额外的用户信息,但我很想知道我对这种情况的理解哪里出了问题。
swift - 定义可观察变量的协议
是否有可能以某种方式在 a 中定义protocol
一些var
应该是的@objc dynamic
,以便可以观察到它KVO
?
scala - 反编译Scala代码:为什么派生类中有两个被覆盖的方法?
反编译Scala代码:为什么派生类中有两个被覆盖的方法?
上面代码的class B被反编译为:
我不明白为什么m1
反编译的代码中有两个“版本”的方法。据我了解,B.m1
只是覆盖A.m1
并public java.lang.Object m1(java.lang.Object)
属于A
并且不应该在 class 中B
。
oop - 在 Go 中模仿正确动态调度的惯用方法
我从 Java 来到 Go,有些事情让我感到困惑。
例如,让我们考虑以下代码:
这里我们有一个I
带有方法的接口Do()
和MegaDo()
. Struct在内部A
实现了方法和MegaDo
调用Do
。并且B
仅由覆盖A
和覆盖Do()
如果我在 Java 中模仿相同的代码,我希望它会打印“B”。但是在 Go 中它会打印“A”。
虽然我有点理解它为什么会发生(因为它是嵌入而不是继承),但我想知道如何在 Go 中模仿同样的事情。例如,我有两个相同接口的实现,它们只有一点不同。在这种情况下如何最大化代码重用?我不敢相信,为了在一个实现中自定义一点逻辑,我必须复制粘贴所有内容并修复我的代码中的一小部分。也许在 Go 中有一些惯用的方法可以做到这一点?
haskell - GHC 是否对存在类型使用动态调度?
以下代码是否使用 C++ 或 Java 中所理解的动态调度?
据我了解,在最后一行,编译器不可能在编译时知道要调用 (==) 的哪个实现,但是代码可以编译并产生正确的结果。有人可以解释一下,这背后有什么样的实现(例如vptr)?
ruby - 具有连续方法调用的 ruby 动态调度
我在 Ruby 中对某个对象执行动态调度时遇到了一个小问题
我想调用一个方法,但我只能通过多次调用来获取它
IE :dynamic_string = 'my_object.other_object.this_method'
我想打电话this_method
给other_object
我my_object.other_object
这是我的 MCVE:
NoMethodError: undefined method 'b.this' for #<A:0x000000025598b0 @b=#<B:0x00000002559888>>
据我了解,发送方法试图b.this
在a
对象上调用 litteral 方法。
我知道要让它发挥作用,我必须连续拨打这些电话:
a.send('b').send('this')
但我不知道如何动态地做到这一点
如何实现连续动态调用?(在这个例子中,我只需要 2 个电话,但如果可能的话,我想要一个更通用的解决方案,它适用于每个电话数量)
oop - 脆弱基类是“继承破坏封装”的唯一原因吗?
正如四人组在“设计模式”中所说:“人们常说‘继承打破封装’”,在“面向对象编程语言中的封装和继承”中解释 Snyder。
然而,每次我读到“继承破坏封装”时,这种说法背后的原因要么被模糊地解释,要么以脆弱基类问题的例子来解释。
在阅读论文时,我感觉唯一真正打破封装的继承属性是下调用,这是开放递归(动态分派)允许的功能,并this
定义为“当超类方法调用在子类中被覆盖的方法时”,根据 Ruby & Leavens 在“安全地创建正确的子类而不查看超类代码”中的说法。此外,根据 Aldrich 在“Selective Open Recursion: A Solution to the Fragile Base Class Problem”中的说法
,开放递归显然是导致脆弱基类问题的原因。
因此,如果 Fragile Base Class 问题是“继承破坏封装”的唯一原因,那么说向下调用破坏封装会更清楚。由于存在一些解决方案来避免向下调用,同时仍然使用继承,因此继承本身并没有真正参与破坏封装。此外,四人组提出的摆脱继承的委托模式也可以允许开放递归和向下调用,因为委托人的上下文 ( this
) 被委托人使用(这可能导致一种脆弱的委托类问题)。
因此我的问题是:脆弱基类问题是说“继承破坏封装”
的唯一原因吗?
rust - `dyn` 与绝对路径一起使用时出现错误 [E0433]
我在玩dyn
Rust 1.27 中引入的特性,偶然发现了这个编译器错误:
所有其他变体都可以正常编译:
这是预期的行为吗?
rustc 1.27.0 (3eda71b00 2018-06-19)
java - 这个向上转换的演示如何工作?
我创建了一个向上转换的演示,我不明白这段代码是如何工作的,或者我可以更具体地说明为什么在派生类完成调度时还要调用基类的构造函数。甚至没有调用基类的构造函数。我什至没有在任何地方使用超级关键字,而不是如何调用基类的构造函数。