2014-09-11 112 views
0

我正在閱讀「Try F#」教程,並決定在安裝必要的F#插件後,嘗試在編輯器中將代碼編寫到Visual Studio中。F#printf沒有輸入

的代碼是:

let toHackerTalk (phrase:string) = 
     phrase.Replace("t", "7").Replace("o", "0") 

    let name:string = "tom" 
    printf "%s",toHackerTalk name 

代碼的在線編輯器中運行,但是當我嘗試在Visual Studio中運行它所有它是flash命令提示符要求我按任意鍵繼續。我意識到這一定是一個非常基本的問題,因爲它在在線編輯器中運行得非常好,所以我不能看出問題所在。

+1

TryF#網站在哪裏?這肯定是一個* bug *,我們應該提交它 - 順便說一句:它也會在你的Fsharp-Interactive窗口中運行(就像在TryF#上一樣) - 尼康說最後一個元組是第二部分評估你想要的(也許你沒有注意到輸出中的第一部分或忽略它) – Carsten 2014-09-11 08:58:17

回答

3

你應該做的:

printf "%s" (toHackerTalk name) 

看到演示:https://dotnetfiddle.net/Ft9O4z

因爲F#你不需要單獨用逗號函數參數,逗號用於元組:

let d = printf "%s",toHackerTalk name 
printfn "%A" d // (<fun:[email protected]>, "70m") 

你正在創建一個具有兩個值的元組((printf "%s"), (toHackerTalk name))

printf "%s" // a function string -> unit 
"70m" // a string 

你不因爲你正在創建一個元組,誰被忽略,得到錯誤,因爲這意味着調用printf 3(也許你會得到一個警告,詢問忽略值)

你不能做

printf "%s" toHackerTalk name 

ARGS:

  1. "%s"字符串
  2. toHackerTalk函數字符串 - >單元
  3. name字符串

printf "%s"預計只有1串ARG

,所以你需要做的

printf "%s" (toHackerTalk name)執行toHackerTalk name並通過結果作爲參數

相同

let temp = toHackerTalk name // or (toHackerTalk name) parens are optional 
printf "%s" temp 
+0

爲了徹底性,但'printfn'%s「'是一個函數'string - > unit'(正確的拼寫也是」逗號「 )。 – phoog 2014-09-11 11:55:34

+0

@phoog固定thx! – 2014-09-11 11:56:58

+0

這很有道理。我將繼續嘗試使用F#,感謝您提供了非常全面的解釋。 – 2014-09-11 15:48:13

4

printf線應該是這樣的:

printf "%s" (toHackerTalk name) 

否則,你正在創建一個tuple而不是調用printf