问题标签 [method-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 投票
0 回答
95 浏览

java - 当值 null 用作参数时,Java 解析重载方法调用

如果还存在而不是生成模棱两可的方法错误,method(char[] a)为什么还要执行 Java ?method(null)method(Object a)


当尝试使用静态方法构建字符串时String.valueOf()......我面临这种情况。请参阅下面的不言自明的准备运行示例:

在检查了String 类的源代码后,我看到 String.valueOf(Object) 方法是空安全的!!,所以String.valueOf(null)实际上并没有调用该String.valueOf(Object)方法,而是调用另一个重载方法。我猜是调用String.valueOf(char[]),知道每个数组(尽管有base type)都是一个对象。

我很确定这一点,因为我进行了自己的测试,再次准备好运行以下代码:

假设我是对的......(顺便说一句,这是问题的一部分......),我一直认为这个调用必须产生一个模棱两可的错误,因为如果编译器必须将“null”关联到一个对象或 char[] 实例。

Java 不支持双重分派(即解析调用什么方法来检查参数的实际类型),那么这里使用什么样的规则来决定将 null 作为 char[] 呢?在我的一生中,我认为 null 更接近于对象“事物”,而不是其他类型的抽象。

“更多”将空值关联到哪种类型?

我急切地等待答案!!

问候。

胜利者

PD:作为HPO(谦虚的个人观点)......我们不同意这有点令人困惑,特别是如果你看第一个例子......?也许,这是在 Java 社区中进行辩论的一个很好的起点。非常感谢!。

0 投票
1 回答
1393 浏览

r - 缺少参数的方法分派

在给定 S4 方法中将参数值显式分派给后续 S4 方法时,如何避免经典Error: argument "<argname>" is missing, with no default错误(参见下面的示例) 。


例子

大图

  • 有一个foo()调用 method的方法bar()
  • 这两种方法都依赖于参数xy.
  • 方法以显式foo()方式分派参数xy到:.bar()bar(x=x, y=y)

现在,这里的关键点是我不想foo()关心传递给的任何或所有参数bar()是否丢失。

通用方法

方法bar()

方法foo()

如上所述,我不想foo()关心传递给的任何或所有参数bar()是否丢失。bar()它只是应该以明确的方式传递所有内容:

方法 def 乍一看可能看起来不错,但如果调用它xy缺少它,它就会失败:

解决方法

到目前为止,这是我能想到的唯一解决方法:

if ... else它有效,但由于所有的陈述,我真的不喜欢它。整个“if-else 逻辑”已经包含在bar(). 毕竟,这就是首先拥有一个方法调度器的全部意义,对吧?因此,我会将这些陈述视为“不受欢迎的工作”,我正在寻找更好的方法。

当然,可以求助于将NULL所有“关键”参数用作默认值,但我想尽可能多地依赖missing()而不是在我的函数中。is.null()

0 投票
1 回答
152 浏览

java - 参数的 Java 编译时分派是否损坏?

我已经知道 Java 基于编译时类型调度方法。但是我有一个案例,我希望它可以工作,但事实并非如此。

考虑这个简单的例子:

和调用代码:

为什么 Java 认为调用它是最合适的bar(Object... objects)?因为我在编译时有一个地图,所以一切都应该工作!为什么我必须像这样明确地贬低它foo.bar((Map<String, Object>)map);

0 投票
2 回答
315 浏览

java - 为什么动态调度的目标在编译时没有确定?

我现在正在阅读一本 Java 书籍,并且在思考 Dynamic Method Dispatch 的工作原理时坚持了很长时间。我知道这是一个强大且有价值的功能,但我不了解它的主要原理。例如,我有一个 B 类,它继承自 A 类并覆盖了 A 的一些方法。所以,当我写一个程序时,我可能会使用这些表达式

我知道在这种情况下会调用方法的版本 B,而不是 A。但我不明白的部分是,为什么编译器不能确定要调用的方法的版本(超类或某个子类)?我的意思是,它明确指出该变量a将包含对 B 类型对象的引用。那么为什么即使它在代码中明确说明,它也只能在运行时确定呢?

0 投票
0 回答
85 浏览

jquery - Python:区分 GET (Method-Dispatcher) 是否被 AJAX 调用

我遇到了无法区分相同的重载方法GET的问题。我使用的是 Method-Dispatcher,所以我只有 GET、PUT、POST 和 DELETE 方法。

ajax 一如既往

每次刷新网页时都会调用 GET 方法,但我也想用 ajax 调用此方法

另一个解决方案是(当然它还没有工作)

0 投票
2 回答
942 浏览

ruby - 用关键字参数确定方法的数量

我正在开发一个 Ruby 应用程序,我在其中动态调用基于 JSON 数据的方法。松散地:

如上所示,有些方法不带参数,有些方法带关键字参数。在 Ruby 2.1.0(我正在开发的地方)下arity,上述两种方法都是0. 但是,如果我send(cmd,params)总是这样,我会收到不带参数的方法的错误。

如何send在需要时正确传递关键字参数,但在不需要时忽略它们?

0 投票
1 回答
270 浏览

c# - CLR 如何加载接口类型?

如果没有使用具体实现进行初始化,CLR 是否会加载接口类型?

考虑具有实现 FooImpl 的接口 IFoo

例如

CLR 只会在第二种情况下加载 IFoo 类型吗?此外,如果存在从 FooImpl 继承的另一种类型(例如 FooImpl2)

这段代码会从 FooImpl2 开始并沿着继承层次结构加载 IFoo 接口吗?此外,IFoo 的 MethodTable 是否包含直接指向 FooImpl2 的方法表的指针,或者它是否会通过中间实现类型(即 FooImpl)重定向。

0 投票
0 回答
38 浏览

performance - 什么会使虚拟通话比普通通话更快

我知道虚拟通话通常比普通通话要长,主要是因为您必须在任何虚拟通话之前检查 VTable。但是,最近我遇到了一个案例(在一个大型项目中),从方法中删除“虚拟”一词实际上会减慢执行速度。所以我想知道你们是否认为在任何情况下使用虚拟呼叫都会比使用常规呼叫更快。

0 投票
1 回答
22 浏览

r - 分派前的类型转换

我正在定义一个通用函数

应该有两个实例: genfun.default (如果 x 是矩阵) genfun.formula (如果 x 是公式)

这工作得很好,但现在我想在调度发生之前拥有它,如果 x 是一个字符串,它被迫成为一个公式。

不幸的是,以下不起作用

有没有办法在不定义像 genfun.character 这样的进一步实例的情况下处理这个问题?

非常感谢您提前提供的帮助!

最好的,

马丁

0 投票
0 回答
46 浏览

r - S3 Method dispatch for ... 或等价物

如何为同一类的对象列表定义方法?

例如。

在这里,我想...成为一个任意长度的对象列表,所有这些对象都具有相同的类,并且我想对它们做一些事情(将它们组合起来,特定于我的真实类的用例)。

...对我来说,没有可以发送到方法调度的类是有道理的;但是一个简单的重写也不起作用,因为new_method.list不/不应该存在