Match.jl和MLStyle.jl的模式匹配机制?

我定义了俩结构体变量:

t1 = Inheritance(Word("a"), Word("b"))
t2 = Inheritance(Word("b"), Word("c"))

又有模式匹配规则:

function infer(t1, t2) 
    @match (t1, t2) begin
        (Inheritance(M, P), Inheritance(S, M)) => println("match 1")
        (Inheritance(P, M), Inheritance(M, S)) => println("match 2")
        _ => nothing
    end
end

接着运行 infer(t1, t2),我本想 M 限定了相同成员的位置,因此它应该只能匹配第二个,可它却匹配了第一个!实在是出乎意料,因此程序也出错了。这两个Pattern都能匹配到,但是我希望能按顺序只匹配第二个 Pattern 应该怎么做?
Debug 发现 Pattern 中的 M 并没有起到限制成员位置的作用,试了Match.jlMLStyle.jl皆如此 :slightly_frowning_face:

现在是把 M 拆为 M1M2 再添加条件语句 M1 == M2得以解决,还有更好的方式么?

京ICP备17009874号-2