gpt4 book ai didi

julia - 如何检查特定类型的方法是否存在?

转载 作者:行者123 更新时间:2023-12-05 00:22:12 24 4
gpt4 key购买 nike

更新:感谢@rickhg12s 指出我可能偶然发现了一个错误。 method_exists(<, (MyType, MyType))正在返回 truemethod_exists(isless, (MyType, MyType))正在返回 false .我在 v0.3.x 上,但 @rickhg12s 是在 v0.4 的夜间版本上,所以我会提交一个问题。

如何检查特定类型的方法是否存在?

我想我可以使用,例如:

method_exists(<, (Int, Int))

这将返回 true因为小于比较是为两个整数定义的。但是,当我定义自己的类型时:
type MyType; end

然后尝试:
method_exists(<, (MyType, MyType))

它返回 true .但我认为它会返回 false , 自从:
a = MyType()
a < a

< 起引发错误未为 MyType 定义.那么如何在运行时检测给定类型的方法是否存在?

最佳答案

原来method_exists是(目前)检查特定类型的方法是否存在的最佳方法,但需要非常小心。我上面的例子碰巧在 Julia 的内部工作中偶然发现了一些稍微令人困惑(但内部一致)的行为。如果您仍然感兴趣,请继续阅读。

@rickhg12s 在对问题的评论中指出 method_exists(<, (MyType, MyType))正在返回 truemethod_exists(isless, (MyType, MyType))正在返回 false .

听起来像个错误吧?我提交了 an issue Julia 开发人员证实,观察到的行为虽然令人困惑,但在内部是一致的。
<isless是两种不同的方法。重要的是,<对于 < 没有显式方法的情况具有默认行为已经定义。该行为是将参数传递给 isless功能。这种行为的后果是 <为每种类型隐式定义,甚至是刚刚创建的全新类型。所以method_exists(<, (MyType, MyType))应该返回 true . isless另一方面,是链中的“最低” - 没有其他函数可以传递东西,所以如果 isless尚未显式扩展到新类型,如果您尝试使用它,Julia 将返回错误,并且 method_exists(isless, (MyType, MyType))将正确返回 false .

既然已经向我指出了这一点,我就可以看到这背后的逻辑了。但言下之意是method_exists的用户需要小心,他们将它应用于链中“最低”的功能。

关于julia - 如何检查特定类型的方法是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30362889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com