私は使用Microsoft.FSharp.Reflection.FSharpValue.MakeUnion
していますが、これには aReflection.UnionCaseInfo
と an obj[]
(空にすることもできます) がパラメーターとして必要です。
ただし、
Type mismatch. Expecting a obj [] but given a string [] The type 'obj' does not match the type 'string'
である関数の結果で呼び出すと、が取得されstring[]
ます。
私が作成できる最も簡単な例は次のとおりです (これをラップしたテストがありますが、 とマークされた行のためにコンパイルされません!!
。
let one (a:obj[]) = a |> Array.map (fun o->printfn "%A" o) |> ignore
one [|"a";"b";"c"|] // OK!
let str = [|"a";"b";"c"|] //the equivalent of my function return
one str//!!Type mismatch.
string[] を obj[] にキャスト/変換するつもりなのか、それとも ... まあ、私が知らない他の何か間違ったことをしているだけなのかどうかはわかりません。
編集:実際の問題は以下のとおりです
let split (by:string) (input:string) = System.Text.RegularExpressions.Regex.Split(input,by)
let buildArgs content =
match content with
| "" -> [||]
| _ -> content |> split " " //Type mismatch
これは私が解決するために使用したものです:より良い方法はありますか?
| _ -> content |> split " "|> Array.map (fun s->s:>obj)//make sure obj[] is returned
参照としてのキャストと変換 (F#)
私もこれを試しました
let buildArgs content :obj[] = ... // Type mismatch
しかし、それも私にエラーを与えます:
を行わない場合は、関数の最後の行に Mismatch と入力します
Array.map
。