我需要能够比较名为 的结构体的实例Hijri,因此我为该函数定义了一个新方法,isless()如下所示:
function isless(a::Hijri, b::Hijri)
tuple_a = datetuple(a)
tuple_b = datetuple(b)
return tuple_a < tuple_b
end
Run Code Online (Sandbox Code Playgroud)
datetuple()以元组形式返回Hijri结构体的值。
这工作正常:
@show isless(a, b)
Run Code Online (Sandbox Code Playgroud)
然而,这个
@show a < b
Run Code Online (Sandbox Code Playgroud)
抛出错误:
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
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?
我必须isless从以下位置导入Base:
import Base: isless
Run Code Online (Sandbox Code Playgroud)
或在我的函数定义中使用Base.isless(而不是) 。isless
function Base.isless(...)
end
Run Code Online (Sandbox Code Playgroud)
这个问题最初是在Julia Discourse 上得到回答的。