问题标签 [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.
c# - 访问分配给传入的 Func<> 参数的方法
看起来我错过了一些明显的东西,但真的不知道为什么我不能使用/访问分配给传入Func<>
参数的方法,我想在外部调用上下文中访问/调用它。
下面是简单的例子:(真正的results
数据类型不是string
一些复杂的类型)
java - 在 Java 中神奇地调用方法
有没有像 PHP 那样在 Java 中使用魔术方法的方法__call
?
例如:
我正在为 getter 和 setter 方法使用Project Lombok注释来简化代码。
让我们考虑一下,我的地图包含几个由 String 映射的项目,而 defaultKey 定义了默认项目。
我想要的是能够调用foo.getName()
它将默认名称返回为foo.myMap.get(defaultKey).getName()
.
我不能手动编写所有 getter 的原因是 Foo 类实际上是用泛型继承的,内部类可能不同。
我有点需要类似的东西:
这在Java中可能吗?
编辑:
我在这里做了一个更精确的例子来说明我想要实现的目标:https ://gist.github.com/1864457
这样做的唯一原因是“速记”内部类中的方法。
oop - 如何通过查看程序集来判断程序是否使用动态调度
我在 Herb Stutter 上阅读了 Reddit 上的一篇文章:JIT 永远不会像原生那样快,有人发表评论说令人难以置信的是,有人称 Herb “误导”了 C# 使用虚拟方法而不是非虚拟方法(你可以在这里阅读这篇文章)。这让我开始思考,我做了一个快速的小程序,并注意到 C# 实际上确实为 CIL 生成了虚拟方法(callvirt vs call)。但后来有人告诉我,这并不容易,而且 JIT 可能会内联代码而不是使用 vtables 和动态调度。我启动了调试器并试图查看。这是我的简单程序:
然后这里是程序集:
我的问题是:通过查看程序集如何判断它是否使用动态调度?我的预感是因为这 4 条指令类似于我在编程语言课上所记得的:
我假设这是动态调度是否正确?如果是这样,是否还有其他明显的迹象?如果我错了,我怎么知道它是否是动态调度?
f# - 第三方类型的动态调度
这与我之前关于以类型安全的方式扩展第三方类型的问题有关。有一些很好的答案,但它们依赖于编译时已知的具体类型。我不能依赖这个。有时类型是盒装的。有没有办法扩展第三方类型来模拟动态调度?
我会为我自己的库使用一个接口。例如:
作为旁注,如果我们可以这样做会很好:
但显然不可能将运行时强制转换和内联结合起来。
objective-c - 编写许多小方法是否会对 Objective-C 的性能产生影响?
我来自 Ruby,有点采用单一职责原则、封装、松耦合、可测试的小方法等方法论,所以我的代码往往会频繁地从一个方法跳到另一个方法。这就是我习惯在 Ruby 世界中工作的方式。我认为这是最好的工作方式,主要是用于 BDD,因为一旦你开始拥有执行多项操作的“大型”方法,测试就会变得非常困难。
我想知道这种方法在性能上是否存在明显差异?
java - 从对象引用访问超类方法(新手)
假设我有这个类:
现在,如果给我一个 B 类的对象,我可以从 A 类显式调用 foo 方法吗?我尝试向下转换对象,即
但这似乎不起作用。
那么有没有办法完成我想在 Java 中做的事情?
haskell - Dynamic dispatch in Haskell
Programs written in, for example, Java rely a lot on dynamic dispatch.
How are such programs expressed in functional languages such as Haskell?
In other words, what is the Haskell way of expressing the idea underneath "dynamic dispatch"?
c# - 没有访客模式的动态调度
问题
我正在使用一个已经存在的库,我无权访问其源代码。这个库代表一个 AST。
我想复制此 AST 的一部分,但在此过程中重命名对变量的引用。由于可以有一个AssignCommand-Object,它包含一个Expression-object,我希望能够用它自己的函数复制每个对象,这样我就可以递归地调用它们。但是,由于我无权访问库的代码,因此无法添加诸如CopyAndRename(string prefix)
.
Rename
因此,我的方法是创建具有多个重载的单个函数。因此,我将有一个家庭功能如下:
一个函数现在由一个 组成List<Command>
,其中AssignCommand
是 的一个子类Command
。我假设我可以将 a 传递Command
给Rename
-function 并且运行时会找到最具体的那个。但是,情况并非如此,所有命令都传递给Command Rename(Command cmd, string prefix)
. 为什么会这样?有没有办法在不使用丑陋的操作的情况下将调用委托给正确的函数is
?
最小的例子
我已将此问题分解为以下 NUnit-Testcode
所以我的问题归结为:“如何以一种优雅的、多态的、面向对象的方式来修复上面的测试,而不使用is
-checks?”
扩展方法
我也尝试过使用如下扩展方法。这并没有解决问题,因为它们只是上述方法的语法糖:
javascript - 动态调用extjs类中的函数
我有一个看起来像这样的 ExtJs 类:
现在我得到一个字符串 => str
,其中包含我需要运行的方法名称。我需要调用str 中的字符串指定的RuleExecutor 中的方法
该方法被正确调用,但参数未传递。
像这样:
ios - 延迟为 0 的执行选择器?
我经常使用这段代码让 UI 在调用长时间运行的方法之前完成其业务:
但它有什么作用?
我个人的解释一直go
是在下一个运行循环中调用该方法,但那肯定是不对的。