あなたが取得し、それが表示される場所、私はあなたのコードで間違っているものを見ることができます(常に質問をしたときにすることを行ってください)どのようなエラーが指定されていませんでしたにもかかわらず:それがあったかのように、あなたはargv
を処理していますa List
ですが、.NETプログラムエントリポイントでは、タイプArray
の引数、特に文字列の配列-string[]
を受け入れる必要があります。
Array.length
をList.length
に変更すると、この関数がコンパイルされます。あなたはこの関数をコールする場合
[<EntryPoint>]
let main argv =
if (Array.length argv) >= 1 then
printfn "Hello %s" argv.[0]; 0
else
printfn "Not enough arguments"; 1
さて、あなたは配列ではなく、List
で引数を指定するとよいでしょう。 F#では、括弧はリストを示すために使用されます。コメントに応答して
main [| "Test |]
EDIT:
通常は、コール」する必要はありませんが、あなたが配列を表すためにしたい場合は、代わりにブラケットのパイプを使用する必要がありますエントリポイントは明示的に機能します。エントリーポイントはプログラムの「開始」であり、それを呼び出す他の関数はありません。このため、エントリポイント関数はプログラムの最後のファイルの最後の関数でなければなりません。エントリポイントの後にコードを置くと、コンパイラはエラーを返します。
あなたがコードmain ["Test"]
を書いたやり方で、この呼び出しをビルドして実行せずにコードを検証する一般的な方法であるF#のインタラクティブでこの呼び出しを実行したかったと仮定しました。コンパイルの準備ができたら、この呼び出しを削除する必要があります。最初にその最初の項目を取得するために、その長さをチェックするために:
最後に、私はあなたが実際には2回の配列にアクセスしていることを指摘したいと思います。パターンマッチングを使用して両方を行うことができます:
[<EntryPoint>]
let main argv =
match argv with
| [|name|] -> printfn "Hello %s" name; 0
| _ -> printfn "Not enough or too many arguments"; 1
見て:このように、プログラムは実際には少しだけ有効になりました。もっと見ると、元のプログラムは任意の数の引数を受け入れますが、実際には最初のプログラムのみを使用していることに気づくでしょう。これはちょっと「汚れている」と言われています。パターンマッチングを使用する上記のバージョンは、その機能に必要な数の引数を必要とするか、それ以外の場合はエラーメッセージを出力します。
.NETの「EntryPoint」のパラメータタイプは 'array'です。 (モバイルでは、@ワークステーションのときに回答/削除を書く) – CaringDev