问题标签 [multiple-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.
methods - 朱莉娅用了什么方法?
我已经定义了以下变量
它定义了一个矩阵,每行等于相同的数字,并且列中的数字从 1 增加到 10 增加 1。我想知道哪种方法使用 Julia 作为函数*
。我怎么能这样问朱莉娅?
scala - 具有参数化函数的 Scala 动态调度
如何使这段代码工作?
据我所知,Scala 没有动态调度(类似于 Java)。是否可以以某种方式模拟动态调度?
或者最好的解决方案是什么?
oop - 如何避免使用新类型的 Julia 中的大量样板?
我正在考虑编写类似于NamedArrays和Images中定义的类型。假设我只想要一个带有元数据的数组,比如一个用户友好的名称,当我将数组写入磁盘时,我将在文件顶部写入该名称。(这个细节无关紧要;我只是在设计一个例子。)
所以我可能会
或其他东西,并且没有其他行为需要与基本 Array 行为不同。
在我的脑海中,“很明显”我只希望在数组上运行的每个现有函数都在data
这种类型的字段上运行。在另一种语言(例如 Java)中,我可能只是将 Array 子类化并name
作为实例字段添加到子类中,这将自动保持与所有现有 Array 操作的兼容性。但是在 Julia 中,如果我尝试使用上述解决方案,我现在需要定义更多函数,例如 @TimHoly 和 'davidavdav' 在链接包中所做的那样。
当然,我知道被迫手动写出其中一些函数对于实现您尚未考虑过的事情很有用。例如,在MyNamedArray
我上面给出的示例中,可以通过指出我没有定义x::MyNamedArray * y::MyNamedArray
. 但是,如果我只是不关心这一点,并且想要“正常工作”的代码而没有这么多样板怎么办?(参见例如循环符号以在 NamedArrays中推送新方法定义,并在Images中手动写出一百行定义。这些定义中的绝大多数都是样板文件/“显而易见的”定义。)
具体来说,继续我引用的示例,对于MyNamedArray
,默认值可能x*y
不再是 a MyNamedArray
,即因为每个函数只是默认为在基础数据上应用相同函数的“继承”行为,我们可以忘记所有 pre 上的元数据- 现有功能。
请注意,我发现 Tomas Lycken 在这里的回答很有见地,这里的问题和答案也是如此。
我能想到的最好的综合是“你只需要把它吸起来,写出函数,或者写一个宏来为你做这件事。” 如果是这样,那就这样吧;我只是想知道我是否错过了更好的选择,特别是设计解决方案以使其更加朱利安并避免样板的更好方法。
julia - Generic dispatch with Symbols
I was wondering if there was a way to use Symbols for multiple dispatch, but also include a "catch-all method". i.e. something like
The second one works and matches what's in the manual, I'm just wondering how you get the first one to work.
function - 在 Julia v0.5+ 中调度函数
现在每个函数和闭包都有自己的类型。
这是否意味着现在可以向高阶函数提供更详细的信息,例如foo(bar :: Function{Float64}) = ...
,与 0.5 之前的版本相反,其中的类型bar
不能比 更具体Function
?
如果是这样,这样做的正确方法是什么?如果不是,除了编译器能够更好地优化生成的代码之外,这种变化的实际意义是什么?TIA。
performance - Julia:多参数的效率
根据Julia 手册的“性能提示”部分,不建议疯狂地进行多次调度。我遇到了一种情况,似乎我需要 3 个参数来定义我定义的类型。这与我关于对 2 种可能类型仅使用 1 个参数的问题有关。我意识到我可以通过简单地使用另一个参数来解决那里出现的困难,但是我的类型看起来像
对于有几个要调度的参数,这在性能方面是不可取的吗?然后 mytype 上的函数将在 3 个参数上分派,函数参数是否正确?
common-lisp - 函数在多个调度系统中是可变的吗?
我是否正确理解在(大多数?一些?)多种调度语言中,每个方法都会在程序执行的某个时间点添加到函数中。
然后我可以得出结论,作为一个特性的多次调度强制函数是可变的吗?
是否有多种调度语言,其中所有方法都附加到一个(通用)函数(在加载时?),所以不可能在不同的时间点看到不同状态的函数?
c++ - C++ 多分派
鉴于以下问题:
我有一个指针列表Instrument
我在其中添加乐器(例如)
现在,我想遍历列表instruments
并调用doPiano()
当且当当前乐器是钢琴并且doGuitar()
当当当当它是吉他时。这两个函数有很大不同,因此不能在 class 中抽象化Instrument
。
问题是 C++ 将无法 Instrument
通过运行时识别类型,不是吗(由于单次调度)?根据迭代器指向的当前类型,如何实现它调用钢琴或吉他功能。
如果我能实现某事,我会很高兴。像这样的伪代码工作:
结果
实际上,我的方法遇到了几个问题。我使用这篇文章做了很多重构:How do do one downcast a std::shared_ptr? . 感谢大家的帮助 :)
types - 可以在 OCaml 中的类型之间编码二进制函数吗?
我想知道是否可以在 OCaml 中构建类似于多次调度的东西。为此,我尝试为多方法的输入签名创建一个显式类型。例如,我定义了一个数字类型
现在我想要一个函数来对 an和 aadd
求和并返回 an if both and are ,并且如果其中至少一个是 a ,则返回 a 。此外,类型系统应该知道输出将使用哪个构造函数。即它应该在函数调用中静态地知道输出是例如类型的。'a num
'b num
int num
'a
'b
int
float num
float
int num
那可能吗?到目前为止,我只能管理一个签名函数type a b. a num * b num -> a num
,因此(更一般的)浮点数总是必须作为第一个参数提供。这种情况int num * float num
必须被禁止,从而导致非详尽的模式匹配和运行时异常。
似乎需要一个签名,比如type a b. a num * b num -> c(a,b) num
wherec
是一个包含类型提升规则的类型函数。我不认为 OCaml 有这个。开放类型或对象是否能够捕捉到这一点?我不是在寻找类型之间最通用的函数,如果我可以明确列出少数输入类型组合和相应的输出类型就足够了。
java - java支持多分派吗?如果不是,下面的代码是如何工作的?
java支持多分派吗?如果不是,下面的代码是如何工作的?
账户.java
SavingsAccount.java
LoanAccount.java
利息计算.java
计算利息.java
输出