【发布时间】:2015-03-18 03:19:28
【问题描述】:
我正在阅读 Robert Harper 的 Programming in Standard ML(11.02.11 的 1.2 版)。
关于解决类型推断的歧义。罗伯特哈珀说:
重要的问题是在情况被认为模棱两可之前考虑了多少上下文?经验法则是上下文被认为是最近的封闭函数声明。
因此,以下代码将被拒绝:
let
val double = fn x => x + x
in
(double 3.0, double 4.0)
end
我认为拒绝的原因是编译器无法确定double是int->int还是real->real。代码 sn-p 没有提供足够的上下文来解决歧义。一些编译器默认将其设置为int->int,这使得代码 sn-p 类型错误。
我的问题是:
“最近的封闭函数声明”是什么意思?
如何让编译器通过“最近的封闭函数声明”推断出函数
double的类型是real -> real而不明确指定类型?
【问题讨论】:
标签: types sml type-inference ml