isless 功能的新调度不起作用

New dispatch for isless function does not work

我需要能够比较名为 Hijri 的结构的实例,因此我为 isless() 函数定义了一个新方法,如下所示:

function isless(a::Hijri, b::Hijri)
    tuple_a = datetuple(a)
    tuple_b = datetuple(b)
    
    return tuple_a < tuple_b
end

datetuple() returns Hijri 结构的值作为元组。

这很好用:

@show isless(a, b)

不过,这个

@show a < b

抛出错误:

ERROR: LoadError: MethodError: no method matching isless(::Main.HijriConverter.Hijri, ::Main.HijriConverter.Hijri)
Closest candidates are:
  isless(::Any, ::Missing) at ~/Downloads/julia-1.7.0/share/julia/base/missing.jl:88
  isless(::Missing, ::Any) at ~/Downloads/julia-1.7.0/share/julia/base/missing.jl:87
Stacktrace:
 [1] <(x::Main.HijriConverter.Hijri, y::Main.HijriConverter.Hijri)
   @ Base ./operators.jl:352
 [2] top-level scope
   @ show.jl:1047
in expression starting at /home/jafar_isbarov/Documents/projects/hijri/HijriConverter.jl/src/HijriConverter.jl:1

可能是什么原因?

我不得不从 Base 导入 isless:

import Base: isless

或在我的函数定义中使用 Base.isless(而不是 isless)。

function Base.isless(...)

end

这个问题最初是在 Julia Discourse.

上回答的