没有来自F#printf的输入

时间:2014-09-11 08:01:21

标签: f#

我正在阅读“试用F#”教程,并决定在安装必要的F#插件后,我想尝试在编辑器中将代码写入Visual Studio。

代码是:

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

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

代码在在线编辑器上运行,但是当我尝试在Visual Studio上运行时,它只是闪烁命令提示符,要求我按一个键继续。我意识到这一定是一个非常基本的问题,我只是看不出问题是什么,因为它在在线编辑器中运行得很好。

2 个答案:

答案 0 :(得分:4)

您的printf行应如下所示:

printf "%s" (toHackerTalk name)

否则,您要创建tuple而不是调用printf

答案 1 :(得分:3)

你应该这样做:

printf "%s" (toHackerTalk name)

请参阅演示:https://dotnetfiddle.net/Ft9O4z

因为使用F#你不需要用逗号分隔函数参数,逗号用于元组:

let d = printf "%s",toHackerTalk name
printfn "%A" d // (<fun:d@6>, "70m")

您正在创建一个包含两个值( (printf "%s"), (toHackerTalk name) )的元组:

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

你没有得到错误,因为你正在创建一个被忽略的元组(也许你会收到警告要求忽略值)

你做不到

printf "%s" toHackerTalk name

因为这意味着调用printf with 3 args:

  1. "%s"一个字符串
  2. toHackerTalk函数字符串 - &gt;单元
  3. name一个字符串
  4. printf "%s"只需要1个字符串arg

    所以你需要做

    printf "%s" (toHackerTalk name)执行toHackerTalk name并将结果作为参数传递

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