作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有以下功能:
let myFunc x y =
if y = 0 then 1
x
Program.fs(58,17): error FS0001: This expression was expected to have type
unit
but here has type
int
最佳答案
值得补充的是,这不仅仅是 if
的属性。 . F# 是一种基于表达式的语言,这意味着几乎每一段代码(除了类型声明和一些异常(exception))都是一个计算结果的表达式。事实上,F#不会调用if
if 语句,但是一个 if 表达式。
这意味着您可以使用 if
在意想不到的地方。例如,这可能很有用:
x/2 + (if x%2=0 then 0 else 1)
else
,那么表达式仍然需要返回一些东西 - 如果结果是
int
,那么它就没有意义(编译器应该选择哪个数字?),因此它要求结果的类型为
unit
,这是一种特殊类型,表示“无结果”。
unit
type 也是所有命令式函数(例如
printf
)或所有逻辑上不返回任何值(赋值或例如循环)的表达式的结果。这意味着如果你写:
if x > 0 then printfn "Big!"
printfn "Big!"
有一个返回类型
unit
和隐式添加的
else
分支也返回
unit
.您可以创建类型为
unit
的值直接手动(类型只有一个值),所以上面实际上对应于:
if x > 0 then printfn "Big!" else ()
if .. then .. else
更有意义。作为条件运算符:
x/2 + (x%2 == 0 ? 0 : 1)
关于F# 在 If/Then 中推断类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16487644/
我是一名优秀的程序员,十分优秀!