我对Julia来说是全新的,
我有以下类层次结构,当我将子类型NonTerminal
的实例插入到声明为超类型GrammarElement
的数组中时,抛出异常
GrammarElement
|--> Terminal
|--> Nonterminal
就这样
abstract GrammarElement
type Terminal <: GrammarElement
name::String
end
type NonTerminal <: GrammarElement
name::String
rule::Array{GrammarElement,1}
function NonTerminal(name::String)
new(name,GrammarElement[])
end
end
function and_with!(t,e)
push!(t.rule,e)
end
但是当我使用and_with!
函数时,测试会抛出异常
@testset "Test" begin
r = NonTerminal("A")
t=Terminal("B")
and_with!(r,t)
end
失败(删除了邮件中的大量垃圾)
TestFirst: Error During Test
Got an exception of type MethodError outside of a @test
MethodError: Cannot `convert` an object of type Terminal to an object of type GrammarElement
This may have arisen from a call to the constructor GrammarElement(...)
我知道julia主要用于科学计算而不是创建语法解析器,但是它应该完成这项工作并且我正在用该项目学习它
答案 0 :(得分:2)
这似乎是一个问题,因为旧的编译代码仍在范围内(请参阅注释)。解决这个问题的最简单方法就是重启朱莉娅。