问题标签 [multimethod]

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 投票
1 回答
701 浏览

haskell - Clojure - 按返回类型分派?(与 Haskell 类型类一样富有表现力)

这是关于 Clojure 与 Haskell 等其他语言的表达能力的问题。更广泛的问题是表达问题的解决方案

这个问题得出的结论是,通常 Clojure 协议(和多方法)不如 Haskell 类型类具有表达力,因为协议在第一个参数上分派,而 Haskell 类型类可以在返回类型上分派。(现在我觉得这个推理真的很有趣,对发动语言战争没有兴趣。我只对思路清晰感兴趣)。

作为打破这个推理的一部分——我的问题是——我们不能创建一个在返回类型(或类型提示)上调度的 Clojure 多方法。我认为我们可以将以下表达式放入 Clojure 多方法中:

函数是:


编辑:关键是我可以运行:

并在没有函数评估的情况下得到以下结果:

即我有一些关于我的函数的预期类型的​​信息,但没有对其进行评估。


编辑 3(2014 年 4 月 24 日):

假设我有以下类型:(deftype string-type [])

然后我根据这些类型定义了以下函数:

现在我编写一个函数来调度它们的返回类型,如下所示:

然后我写一个宏在编译时运行它

然后我像这样测试它:

这给出了以下结果:

所以我似乎是在返回类型上进行调度。

0 投票
2 回答
1824 浏览

c++ - Loki 多方法是否进入了 C++11?

我正在阅读Andrei Alexandrescu所应用的Modern C++ Design Generic Programming and Design Patterns关于多方法的第 11 章,这正是我试图解决的问题。本书的所有源代码都发布在一个名为Loki的库中。

问题是这本书相当旧(2001 年),并且处理了C++11 中不再适用的限制(例如,模板参数的数量不能是可变的)。我试图查找 Loki 是否已使用 C++11 重写,但最后一次修改日期为 2009 年,并且Andrei Alexandrescu 的主页上没有更新。然而,在做了一些研究之后,我觉得 Loki 有点像 Boost,因为它被合并到了标准库中。

多方法习语或它的某些部分是否已被 C++11 采用?

0 投票
1 回答
173 浏览

clojure - Clojure 多方法给出意外的空指针

我很难让 Clojure 中的多方法按预期工作。我的代码的提炼如下。

现在我希望在这里有方法 commandType 在参数上调用,它当然会返回 :one ,它应该将它发送到第一个 defmethod 但我得到一个空指针异常。即使是我能想到的最简单的多方法调用也会给我一个空指针:

然而,位于此处的 clojure 文档中的示例运行良好。有什么基本的我做错了吗?

0 投票
2 回答
140 浏览

inheritance - Clojure中的多方法不返回预期值

我正在研究 Clojure 的喜悦这本书,现在在多方法部分。在那本书中,他们给出了一个应该返回一件事的示例,但为我返回了另一件事(我已经尝试过 LightTable 和 Emacs)。代码有点长;我尽可能把它修剪掉,但为此道歉。它是倒数第二个未按预期返回的命令(显示为内联)。我怎样才能正确地完成这项工作?

辅助函数与问题无关,因此您可以先跳到多方法。我将它们包括在内,以防它们可能是问题的根源。如果您需要了解更多信息,我将在最后添加注释来解释它们。

*关于助手的注意事项:newget是根据 ns-qualified 关键字重新定义的::prototype,它正在使用 in beget,这基本上只是-assoc使用该关键字的映射和另一个映射作为其值到馈入它的映射作为论据。clone这个新的 {:keyword {map-as-val}} 对最终通过底部定义的函数关联到 osx 数据映射中。新定义的数据映射是上面代码底部多方法调用的参数。

我是多方法的新手,只想直观地了解多态调度在 Clojure 中的工作原理。我是否因为认为这过于复杂而疯狂?

0 投票
1 回答
285 浏览

clojure - Clojure defmethod Pattern Match Dispatch-Value

I seem to be coming up with too many multi-dispatch functions and would like to reduced the number. The approach I am currently using is to have a multi-function call another multifunction but that seems wrong. Here is an example of what I would like:

The basic idea being that in the first case the method does not care what the third element of the dispatch value is, it will take them anything, but the second element must be :y.

Is something like this possible in clojure?

I may be asking for predicate dispatch, which, I guess, is still a work in progress.

0 投票
1 回答
100 浏览

clojure - 了解多方法调度

我可以理解这是如何工作的:

但是通过简单地更改:Shape:Shap,我不再了解这是如何发送的:

Eclipse 上的 Clojure 1.5.1,带有逆时针插件

0 投票
2 回答
979 浏览

haskell - Haskell 函数什么时候应该采用元组,而不是多个参数?

http://www.haskell.org/pipermail/haskell-cafe/2007-August/030096.html中,typeclass 方法collide被定义为将 2 元组作为其单个参数,而不是两个“正常”参数(我认为我了解部分应用等)。

这样做的目的是什么?

什么时候使用元组参数而不是多个参数更好?

0 投票
1 回答
5942 浏览

python - flask-restful 有一个 get/并在同一个班级中使用 json 发布

如果 # api.add_resource(User, '/user/') 行未注释,而另一个 api.add_resource 是,则用户的 get 方法有效。反之亦然,使 post 方法起作用。

我怎样才能让这两条路径都起作用?

0 投票
2 回答
425 浏览

clojure - Clojure 中的组合方法

假设我们有一个 multimethod foo。它有几个实现。假设当参数 of 是包含字符的字符串时调用其中一个,而当参数 offoo是包含字符的字符串时\r执行另一个。伪代码:foo\!

所以当我们这样调用我们的函数时:

这里重要的是,支持的方法列表不应该是死板的,而是可扩展的,因此以后可以添加新方法而无需触及原始代码。

虽然最近几天我的 Clojure 技能有了显着提高,但我仍然缺乏经验。我最好的想法是保留一张带有“字符 - 功能”对的地图,然后手动遍历它并执行正确的功能。在这种情况下,我还需要一些接口来注册新功能等。什么是惯用的解决方案?

0 投票
3 回答
1100 浏览

c++ - C++ 多方法和编译时检测

我有以下代码:

然后收集 A* 对象,我想实现以下目标:

1)

2)在编译时以某种方式确定,如果 A* 指向派生对象 D,并给出编译器错误,如果MyVisitor::visit(D*)函数不存在

我知道 1) 可以通过一些多方法实现来实现,我想我可以找到一些用于 c++ 的多方法实现。但是2)有可能吗?