2016-10-03 32 views
0

このコードについて何が分かりませんか。私は文字列を出力するか、引数が足りないかを返すためのmain関数としてこれを使いたい。このVS15について間違っていることは、この例ではあまり役に立ちません。F#関数の型が間違っていて、関数呼び出しの型が間違っています

[<EntryPoint>] 
let main argv = 
    if (List.length argv) >= 1 then 
     printfn "Hello %s" argv.[0]; 0 
    else 
     printfn "Not enough arguments"; 1 

main ["Test"] 
+3

.NETの「EntryPoint」のパラメータタイプは 'array'です。 (モバイルでは、@ワークステーションのときに回答/削除を書く) – CaringDev

答えて

6

あなたが取得し、それが表示される場所、私はあなたのコードで間違っているものを見ることができます(常に質問をしたときにすることを行ってください)どのようなエラーが指定されていませんでしたにもかかわらず:それがあったかのように、あなたはargvを処理していますa Listですが、.NETプログラムエントリポイントでは、タイプArrayの引数、特に文字列の配列-string[]を受け入れる必要があります。

Array.lengthList.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 

見て:このように、プログラムは実際には少しだけ有効になりました。もっと見ると、元のプログラムは任意の数の引数を受け入れますが、実際には最初のプログラムのみを使用していることに気づくでしょう。これはちょっと「汚れている」と言われています。パターンマッチングを使用する上記のバージョンは、その機能に必要な数の引数を必要とするか、それ以外の場合はエラーメッセージを出力します。

+0

通常はどこにも置かない。プログラムのエントリーポイントは、いわば「プログラムの外から」と呼ばれています。プログラム内の他の機能は、エントリポイントを呼び出すべきではありません。それが「エントリーポイント」の意味です。それはプログラムへの参入のポイントです。私はあなたがF#インタラクティブでそれを実行するためにこの呼び出しを書いたと仮定しました。これは、コードをビルドして実行せずにコードを検証する一般的な方法です。 –

+0

私は答えを更新しました。 –

+1

私は何もしていません。何かをして問題を起こそうとしているのはあなたです。私はこれらの問題をあなたのコードで見ている範囲で解決しようとしています。おそらく、あなたがしようとしていること、働いていないもの、取得したエラー、場所などをより正確に記述するために質問を言い換えるべきです。 –

関連する問題