有 Haskell 入门左右的经验,Contracts 概念其实很眼熟的, 今天在 Twitter 上看到了这条推:
Scheme 果然是语言设计爱好者的天堂。Typed Racket 启发了 Contracts.coffee,后者又启发了 Contracts.ruby。再加上 Erlang 的 spec 语法,在编译时/运行时加入类型契约的动态语言越来越多了。 https://twitter.com/liancheng/status/219825359149993987
contracts.coffee 作为 coffee 党早眼熟了 http://disnetdev.com/contracts.coffee/ 接着找到了对应的 contracts.ruby http://egonschiele.github.com/contracts.ruby/ 静态语言在定义函数的时候声明类型很常见的呀, contracts 的类型和他们怎么区别开的?
代码..
Contract ArrayOf[Num], Func[Num => Num] => ArrayOf[Num]
def map(arr, func)
ret = []
arr.each do |x|
ret << func[x]
end
ret
end