问题标签 [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.

0 投票
4 回答
95 浏览

c# - 访问分配给传入的 Func<> 参数的方法

看起来我错过了一些明显的东西,但真的不知道为什么我不能使用/访问分配给传入Func<>参数的方法,我想在外部调用上下文中访问/调用它。

下面是简单的例子:(真正的results数据类型不是string一些复杂的类型)

0 投票
2 回答
6078 浏览

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

这样做的唯一原因是“速记”内部类中的方法。

0 投票
2 回答
1212 浏览

oop - 如何通过查看程序集来判断程序是否使用动态调度

我在 Herb Stutter 上阅读了 Reddit 上的一篇文章:JIT 永远不会像原生那样快,有人发表评论说令人难以置信的是,有人称 Herb “误导”了 C# 使用虚拟方法而不是非虚拟方法(你可以在这里阅读这篇文章)。这让我开始思考,我做了一个快速的小程序,并注意到 C# 实际上确实为 CIL 生成了虚拟方法(callvirt vs call)。但后来有人告诉我,这并不容易,而且 JIT 可能会内联代码而不是使用 vtables 和动态调度。我启动了调试器并试图查看。这是我的简单程序:

然后这里是程序集:

我的问题是:通过查看程序集如何判断它是否使用动态调度?我的预感是因为这 4 条指令类似于我在编程语言课上所记得的:

我假设这是动态调度是否正确?如果是这样,是否还有其他明显的迹象?如果我错了,我怎么知道它是否是动态调度?

0 投票
1 回答
317 浏览

f# - 第三方类型的动态调度

这与我之前关于以类型安全的方式扩展第三方类型的问题有关。有一些很好的答案,但它们依赖于编译时已知的具体类型。我不能依赖这个。有时类型是盒装的。有没有办法扩展第三方类型来模拟动态调度?

我会为我自己的库使用一个接口。例如:

作为旁注,如果我们可以这样做会很好:

但显然不可能将运行时强制转换和内联结合起来。

0 投票
4 回答
279 浏览

objective-c - 编写许多小方法是否会对 Objective-C 的性能产生影响?

我来自 Ruby,有点采用单一职责原则、封装、松耦合、可测试的小方法等方法论,所以我的代码往往会频繁地从一个方法跳到另一个方法。这就是我习惯在 Ruby 世界中工作的方式。我认为这是最好的工作方式,主要是用于 BDD,因为一旦你开始拥有执行多项操作的“大型”方法,测试就会变得非常困难。

我想知道这种方法在性能上是否存在明显差异?

0 投票
4 回答
495 浏览

java - 从对象引用访问超类方法(新手)

假设我有这个类:

现在,如果给我一个 B 类的对象,我可以从 A 类显式调用 foo 方法吗?我尝试向下转换对象,即

但这似乎不起作用。

那么有没有办法完成我想在 Java 中做的事情?

0 投票
4 回答
7993 浏览

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"?

0 投票
3 回答
3234 浏览

c# - 没有访客模式的动态调度

问题

我正在使用一个已经存在的库,我无权访问其源代码。这个库代表一个 AST。

我想复制此 AST 的一部分,但在此过程中重命名对变量的引用。由于可以有一个AssignCommand-Object,它包含一个Expression-object,我希望能够用它自己的函数复制每个对象,这样我就可以递归地调用它们。但是,由于我无权访问库的代码,因此无法添加诸如CopyAndRename(string prefix).

Rename因此,我的方法是创建具有多个重载的单个函数。因此,我将有一个家庭功能如下:

一个函数现在由一个 组成List<Command>,其中AssignCommand是 的一个子类Command。我假设我可以将 a 传递CommandRename-function 并且运行时会找到最具体的那个。但是,情况并非如此,所有命令都传递给Command Rename(Command cmd, string prefix). 为什么会这样?有没有办法在不使用丑陋的操作的情况下将调用委托给正确的函数is

最小的例子

我已将此问题分解为以下 NUnit-Testcode

所以我的问题归结为:“如何以一种优雅的、多态的、面向对象的方式来修复上面的测试,而不使用is-checks?”

扩展方法

我也尝试过使用如下扩展方法。这并没有解决问题,因为它们只是上述方法的语法糖:

0 投票
2 回答
4438 浏览

javascript - 动态调用extjs类中的函数

我有一个看起来像这样的 ExtJs 类:

现在我得到一个字符串 => str,其中包含我需要运行的方法名称。我需要调用str 中的字符串指定的RuleExecutor 中的方法

该方法被正确调用,但参数未传递。

像这样:

0 投票
1 回答
1510 浏览

ios - 延迟为 0 的执行选择器?

可能重复:
-performSelector:withObject:afterDelay: 如何工作?

我经常使用这段代码让 UI 在调用长时间运行的方法之前完成其业务:

它有什么作用?

我个人的解释一直go是在下一个运行循环中调用该方法,但那肯定是不对的。