如何定义一个存储抽象类型的变量?

想根据字符判断使用何种类型,代码如下:

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

哪种方式更好呢?

嗯,我只是想占个位置的,我直接删了这一行