julia中的多态函数和子类型

julia中的多态函数和子类型,julia,Julia,我正在学习Julia,为此,我正在为一些非指定任务构建一个调度器的模拟。为此,我想创建一个抽象类型,它表示状态的概念。任务可以处于任何状态:已接受、未完成、正在运行、已完成: abstract RequestState 然后我添加了一些具体的状态,它们将RequestState作为超级状态: immutable StateAccepted <: RequestState name :: String end 我用一个宏生成这个,也许它是相关的 现在问题来了。我想写

我正在学习Julia,为此,我正在为一些非指定任务构建一个调度器的模拟。为此,我想创建一个抽象类型,它表示状态的概念。任务可以处于任何状态:已接受、未完成、正在运行、已完成:

abstract RequestState 
然后我添加了一些具体的状态,它们将RequestState作为超级状态:

immutable StateAccepted <: RequestState 
       name :: String 
end 
我用一个宏生成这个,也许它是相关的

现在问题来了。我想写一个函数,检查有效的转换。我现在只有一个骨架:

function checkTransition{T <: RequestState, Q <: RequestState}(t :: T, q :: Q) :: Bool 
  return true 
end      
如何使泛型函数只接受RequestState子类型的参数

编辑:

根据违规测试的要求:

@test checkTransition(Accepted, Running) 
但这并没有起作用,因为我在更改软件包后忘记了更新和安装它。在这项修改之前,它是:

function checkTransition{T <: RequestState, Q <: RequestState}(t :: T, q :: Q) :: Q 
    return q 
end 

函数checkTransition{T当您的代码应该工作时,通常是一个

checkTransition(t::RequestState, q::RequestState) = true

当您的代码应该工作时,不要使用不必要的
T,通常是编写

checkTransition(t::RequestState, q::RequestState) = true

不要使用不必要的
T,你需要发布测试,让我们知道它失败的原因。你需要发布测试,让我们知道它失败的原因。啊,谢谢,我知道这一定是件愚蠢的事情。我添加了令人不快的代码,并记录了我犯的错误。谢谢你指出它不是一个通用类型,我实际上是想这么做的写在这里。这是一个关于存在主义与普遍量化的有趣评论……但我正在努力思考两者之间的实际区别,或者这种区别在类型和julia代码的上下文中很重要的情况。是否存在这样一种情况,即声明T为R的子类型仍然会将R的某些子类型排除在外作为有效参数传递?(显然,在后续函数定义中明确任何此类排除之前)或者你只是在评论人们应该如何从语义的角度解释“模板”类型的概念?@tasospapstylateanou存在类型和普遍类型在类型理论中有特定的含义。对象的类型是
Vector{T}其中T
,例如,如果存在一个
T
,因此对象的类型为
Vector{T}
。对于所有T
(假设存在),对象的类型为
Vector{T},如果对于每个
T
,对象的类型为
Vector{T}
;在Julia中没有符合该标准的对象。啊,谢谢,我知道这一定是愚蠢的事情。我添加了令人不快的代码并记录了我犯的错误。谢谢你指出它不是一个通用类型,我实际上是想在这里写的。这是一个关于存在主义与通用量化的有趣评论ion…但我正在努力思考两者之间的实际区别,或者这种区别在类型和julia代码的上下文中很重要的情况。是否存在这样一种情况:将T声明为R的子类型仍然会排除R的某些子类型作为有效参数传递?(显然,在后续函数定义中明确任何此类排除之前)或者你只是在评论人们应该如何从语义的角度解释“模板”类型的概念?@tasospapstylateanou存在类型和普遍类型在类型理论中有特定的含义。对象的类型是
Vector{T}其中T
,例如,如果存在一个
T
,因此对象的类型为
Vector{T}
。对于所有T
(假设存在),对象的类型为
Vector{T}(假设存在),如果对于每个
T
,对象的类型为
Vector{T}
;在Julia中,没有满足该标准的对象。
function checkTransition{T <: RequestState, Q <: RequestState}(t :: T, q :: Q) :: Q 
    return q 
end 
checkTransition(t::RequestState, q::RequestState) = true