Julia-将子类型元素插入到超类型的数组中
朱莉娅对我来说是个新手 我有下面的类层次结构,当我将子类型Julia-将子类型元素插入到超类型的数组中,julia,Julia,朱莉娅对我来说是个新手 我有下面的类层次结构,当我将子类型非终结符的实例插入到超类型语法元素声明的数组中时,会引发异常 GrammarElement |--> Terminal |--> Nonterminal 因此 abstract GrammarElement type Terminal <: GrammarElement name::String end type NonTerminal <: GrammarElement name::Strin
非终结符
的实例插入到超类型语法元素
声明的数组中时,会引发异常
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
失败(已删除邮件中的大量垃圾)
- 为什么这种转换不可能呢
- 我怎样才能解决这个问题
- 声明父类型是否有用
我知道julia主要用于科学计算,而不是创建语法分析器,但它应该可以完成这项工作,我正在通过该项目学习它这似乎是一个问题,因为旧的编译代码仍在范围内(请参阅注释)。处理这个问题最简单的方法就是重新启动Julia。在v0.5.1和v0.6-pre-beta上对我有效。你重新启动Julia是为了确保它不只是保留一个旧的方法或类型定义吗?这很奇怪,我在终端中尝试了它,但它在juno中不起作用,调用
workspace()
是否与重新启动Julia相同?(idk如何重新启动julia)我有v0.5.1版本,我相信调用工作区与重新启动julia并不完全相同,因为常量(包括函数)不会被删除。我想这是在v0.6上更改的?其他人应该跳到这里。我应该更新到v0.6吗?好的,你完全正确,这是关于重置julia的,把你的评论作为答案,这样我就可以接受:)
@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(...)