在fsharp中,raise函数有类型System.Exception -> 'a,但似乎要求你提供一个1元素的元组System.Exception.这只是一个特殊的内置语法,还是还有其他类型的东西我不明白?
如果我理解你的问题,你就会问为什么我不能写:
raise System.Exception("oops")
Run Code Online (Sandbox Code Playgroud)
..但相反,我必须在创建异常的表达式周围加上括号:
raise (System.Exception("oops"))
Run Code Online (Sandbox Code Playgroud)
解释是编译器实际上将前者解释为raise具有两个单独参数的调用 - 第一个是标识符System.Exception,第二个是(带括号的)字符串参数.那是:
raise System.Exception "oops"
(raise System.Exception) "oops"
Run Code Online (Sandbox Code Playgroud)
当您添加括号(在第二行)时,您可以看到为什么这不起作用.这将是有效的,如果类型raise是像(unit -> exn) -> string -> 'a.
这是解析F#表达式的一般属性.你写的时候可以得到同样的东西
let rnd = System.Random()
sin rnd.NextDouble()
Run Code Online (Sandbox Code Playgroud)
在这里,你还需要写,sin(rnd.NextDouble())因为否则它被视为:
sin rnd.NextDouble ().
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |