我正在尝试学习 CLOS 并遇到了这个惊喜。 我的 arguments 上似乎有 3 个动作方法不匹配。当我运行 tryme function 时,为什么最后一个参数标记为“:c”的动作没有触发预期的错误? 我究竟做错了什么? 还是 SBCL 错误? 怀疑我怀疑我应该在方法定义中使用: (lock ...
我正在尝试学习 CLOS 并遇到了这个惊喜。 我的 arguments 上似乎有 3 个动作方法不匹配。当我运行 tryme function 时,为什么最后一个参数标记为“:c”的动作没有触发预期的错误? 我究竟做错了什么? 还是 SBCL 错误? 怀疑我怀疑我应该在方法定义中使用: (lock ...
我想装饰shapely.geometry.Point class 以从dendropy.datamodel.basemodel.AnnotationSet object 实例化它。我选择了multimethod package 来分派超类的__init__ ,因为它将此方法分派到一个简单的 cla ...
我遇到了一个问题,当我用多方法装饰器装饰一个函数时,lambda 会抛出一个“'module' object is not callable”错误。 我创建了一个任意示例来重现这个问题。 如果我删除装饰器,它就可以工作。 出于某种原因,我的函数一经修饰就被视为模块。 我正在使用层来包含多方法,但 ...
编辑#1:我已经按照建议使用“手动”基于 if/else 的解决方案更新了示例,以证明需要进一步自动化。 在基于关键字参数名称而不是类型选择目标 function 的情况下,如何有效地调度函数(即实现类似multimethods的功能)? 我的用例是为数据类实现多个工厂方法,这些数据类的字段相互依赖 ...
我以clojure 站点为例。 这个功能很酷。 我试图了解为什么这优于(例如)java 中基于实例的实现的技术原因。 在我看来,在 function 中基本上等同,语法更好。 为什么 multimethods 被认为是基于访问者模式的双重调度的一个很好的替代方案,而 instanceof 在它们看 ...
我有一个有两个多方法的类( multi submit )。 我这样称呼我的 multi: 哪个被运送到我的班级: 但是我总是得到以下回应: 尽管我的命名参数 ( :message ) 是Str要求的并且@models声明了默认值。 ...
我正在写一个agar.io克隆。 我最近看到了很多限制记录使用的建议(例如here ),所以我试图仅使用基本地图来完成整个项目。 * 我最终为不同的“类型”细菌创建了构造函数,例如 “定向细菌”已添加新条目。 :direction条目将用于记住它的前进方向。 问题是 :我 ...
是否可以基于命名空间的地图命名空间(即#:<this-thing>{}进行调度? 是否没有像打印或检查键前缀这样的hacks? 我认为最后一个是hacky,因为可以覆盖键前缀: ...
我有一个带有很多大地图和其他东西的应用程序,打印时笨拙,因此我为它们制作了一个自定义打印功能,并设置了print-method来调用它,如下所示: 在fstr1内部,如果确定映射不是需要特殊处理的类型之一,该如何调用普通的打印方法? 这个答案建议在元数据中放置一个:type ,因为 ...
您能用实例解释一下retag参数如何影响multi-spec创建? 我发现难以消化的multi-spec文档。 ...
我正在使用字符串的位置接口。 我知道如何像 Python 在 Perl 6 中那样对字符串进行切片? ,但我很好奇我是否可以让这个东西只为咯咯笑而工作。 我想出了这个例子。 阅读位置很好,但我不知道如何设置multi来处理任务: 最后一个不起作用: 不过,我不认为它会起作用。 我不知道它 ...
考虑这个例子,其中子类有一个没有签名的multi方法和一个带有slurpy参数的方法: 方法查找是如何构建的? 我正在寻找一种方法来解释它,特别是没有抱怨它。 有一个呼叫Bar的do-it用1的实例。 一些合理的人可能会认为它首先在Bar寻找匹配的签名,并且该漏洞将永远不会让 ...
假设我有一个Java方法可返回某个父接口的对象。 此函数返回的对象的类未记录,但是存在丰富且记录良好的接口层次结构,这些结构都扩展了父接口。 因此,例如: 如果我知道底层对象(并且对底层对象的稳定性有信心),则可以编写一种多方法来分派该方法返回的各种对象: 但是,由于只有接口 ...
我是否正确理解,以(大多数还是某些?)多种调度语言,每个方法都会在程序执行的某个时间点添加到函数中 。 然后我是否可以得出结论,将多个调度作为功能强制功能是可变的? 是否存在多种调度语言,其中所有方法都在加载时(附加功能)一起附加到(泛型)函数,所以不可能在不同的时间点看到处于不同状 ...
虽然下面的例子看起来有点奇怪,但这是因为我试图减少我目前得到的一个相当大的问题。 当他们坐在几个抽象层后面并且在多个名称空间中定义了defmulti和相应的defmethods时,我正在努力研究如何调用多方法。 我真的觉得我错过了一些明显的东西...... 假设我有以下场景: ...
我正在使用多方法来解析命令行命令及其参数。 当我尝试访问元数据时,对于特定方法,clojure 返回nil : ...
说我有一个类似下面的代码设置 现在让我们说我想将太空飞船移到某个位置,但是燃料计算结果导致飞船上的燃料量为负(即旅行所需的燃料不足)。 那么,有没有一种方法可以防止:after限定符被调用而不必发信号通知错误情况? 如果我不停止通话,该船将被移至新位置,而不会减少任何燃料,这 ...
我试图在一个单独的文件中定义一个多方法及其实现。 它是这样的:在文件1中 在文件2中 在我调用方法的主文件中,我定义了这样的东西: 当我这样做时,我得到一个异常,说"No method in multimethod 'foo'for dispatch value: he ...
我在clojure中实现了快速功率算法: 现在我想玩类型提示和java互操作。 我想这样做是因为在clojure中更好地理解所有这些“java东西”。 它看起来很容易,但实际上存在很多隐藏的障碍。 所以,我写道: 当然,由于错误的arity问题,它甚至没有编译。 所以我谷 ...
我想编写一个游戏,并想为多个实体使用一个组件模式。 在具有接口/类型类/多重继承的语言中,没有问题。 我希望某些实体可更新但不可渲染,而有些则两者兼而有之。 哈斯克尔: 我可以创建一个可以更新的事物列表。 在 Java/D/... 这可以通过接口实现 现在我想知道如何使用多方法 ...