私はJuliaを学習しています。その目的のために、特定されていないタスクのためのスケジューラのシミュレーションを構築しています。このために、私は状態の考え方を表す抽象型を作成したいと思います。タスクが完了し、実行して、任意の状態受け入れに叶わないかもしれない:juliaの多形関数とサブタイプ
abstract RequestState
それから私は、スーパーステートとしてRequestStateを持っているいくつかの具体的な状態、追加:
immutable StateAccepted <: RequestState
name :: String
end
を、各状態はとにかく不変であるため、とそれは面白い構造を持っていない、すべてのインスタンスが同じであるので、私は使用するために、上記の型のインスタンスをインスタンス化:
const Accepted = StateAccepted("Accepted")
私はそれはおそらく、マクロでこれを生成します関連性があります。
今問題が発生します。有効なトランジションをチェックする関数を記述したいと思います。私は式を読んでくださいと仮定
function checkTransition{T <: RequestState, Q <: RequestState}(t :: T, q :: Q) :: Bool
return true
end
:私はこの時点で骨格を持っている
T <: RequestState
RequestStateのサブタイプであるが、私は、これは間違っていると思うT FORALLのようなものとして。
このコードがコンパイルされると思います。問題は、私がエラーを理解していないとドキュメントで何も見つけることができないということです。私は言語に慣れていないので、これは可能性があることに注意してください。関連するエラーがある:
Error During Test
Expression evaluated to non-Boolean
Expression: checkTransition(Accepted,Running)
Value: ResourceScheduler.StateRunning("Running")
ERROR: LoadError: There was an error during testing
in record(::Base.Test.FallbackTestSet, ::Base.Test.Error) at ./test.jl:397
in do_test(::Base.Test.Returned, ::Expr) at ./test.jl:281
in include_from_node1(::String) at ./loading.jl:488
in process_options(::Base.JLOptions) at ./client.jl:262
in _start() at ./client.jl:318
while loading /home/eklerks/.julia/v0.5/ResourceScheduler/test/runtests.jl
どのように私はRequestStateのサブタイプの引数だけを受け入れる一般的な機能になるだろうか?
EDIT:
としては、問題のテスト要求:
@test checkTransition(Accepted, Running)
をしかし、私は、私はそれを変更した後、私のパッケージを更新してインストールするのを忘れているため、これは、うまくいきませんでした。変更前は、
function checkTransition{T <: RequestState, Q <: RequestState}(t :: T, q :: Q) :: Q
return q
end
エラーの原因となっていました。タイプQは実際にはブール値ではありません。私はその時点でタイプシステムを試していました。
なぜ失敗するのかわからない場合は、テストを投稿する必要があります。 –