想根据字符判断使用何种类型,代码如下:
abstract type Sentence end
abstract type Judgement <: Sentence end
abstract type Question <: Sentence end
# 以下是问题代码
type = nothing # type 应该是何种类型呢?直接 local type?
if nse[end] == '.'
type = Judgement
elseif nse[end] == '?'
type = Question # 这里会警告 Invalid redefinition of constant
end
放到函数里吧,另外nothing不是类型,Nothing才是
类型单独储存是什么操作?
一定要储存类型就用 DataType
type = Nothing
# typeof(type) == DataType
直接把弄个容器把值装到对应类型的容器中。
抽象类型一般就用作类型树上的节点,也不能实例化。
abstract type Sentence end
struct Judgement <: Sentence; val :: Char; end
struct Question <: Sentence; val :: Char; end
Judgement('.')
Question('?')
因为一个句子可以是陈述句、疑问句、感叹句,每种句子的结构都是一样的,不想重复写同样的结构体,但是又不知道什么好用的设计模式。
当然可以用枚举,再在一个结构体里专门加一个字段
@enum SenType begin
Judgement
Question
end
struct Sentence
term::String
type::SenType
end
好吧,最后我还是这么干了
abstract type AbstractSentence end
abstract type Judgement <: AbstractSentence end
abstract type Question <: AbstractSentence end
struct Sentence{T <: AbstractSentence}
term::String
end
哪种方式更好呢?