F# 错误 FS0039:未定义值或构造函数 'input'
F# error FS0039: The value or constructor 'input' is not defined
let getName name:string =
printfn "the name is %s" name
我试图做的就是让代码显示一个字符串,但是当我输入例如“julian”时,我得到了 FS0039 错误,但是当我将它更改为 (name:int) 并输入一个数字时,它完美地工作很好
我认为您缺少 name:string
周围的括号,否则 : string
会被解析为整个函数的 return 值,并且如果您的函数只是执行副作用与打印一样,return 值为 unit
。
let getName name:string =
表示 getName
是一个函数 returning a string
并采用参数 name
和要推断的类型 - 它的临时签名是 (name: 'a) -> string
。误导的是空格:并不是因为这里 name:string
没有空格,所以 :string
指的是参数 name
而不是函数 getName
.
基于其 body printfn "the name is %s" name
:
- 函数应该return
unit
- 参数
name
的类型为 string
(请参阅 %s
占位符)
所以,您可以:
- 要么加括号
let getName (name: string) = ...
- 或(更好)删除类型注释
let getName name =
以依赖因 %s
. 而在此处起作用的类型推断
最后一点:您的函数称为“get something”,但实际上 return 什么都没有。它不一致,使它更难使用和维护。 greet
、print
、printName
之类的比较合适。
let getName name:string =
printfn "the name is %s" name
我试图做的就是让代码显示一个字符串,但是当我输入例如“julian”时,我得到了 FS0039 错误,但是当我将它更改为 (name:int) 并输入一个数字时,它完美地工作很好
我认为您缺少 name:string
周围的括号,否则 : string
会被解析为整个函数的 return 值,并且如果您的函数只是执行副作用与打印一样,return 值为 unit
。
let getName name:string =
表示 getName
是一个函数 returning a string
并采用参数 name
和要推断的类型 - 它的临时签名是 (name: 'a) -> string
。误导的是空格:并不是因为这里 name:string
没有空格,所以 :string
指的是参数 name
而不是函数 getName
.
基于其 body printfn "the name is %s" name
:
- 函数应该return
unit
- 参数
name
的类型为string
(请参阅%s
占位符)
所以,您可以:
- 要么加括号
let getName (name: string) = ...
- 或(更好)删除类型注释
let getName name =
以依赖因%s
. 而在此处起作用的类型推断
最后一点:您的函数称为“get something”,但实际上 return 什么都没有。它不一致,使它更难使用和维护。 greet
、print
、printName
之类的比较合适。