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(...)