以前的ML在http://sml-family.org/Basis/general.html中描述为
b之前的b 返回一个。它提供了一个标记速记,用于评估之前的a,然后是b 返回a的值。
当我尝试使用此命令时,期望x = 4和(4 + 1)被评估
// routes/application.js
export default Ember.Route.extend({
beforeModel: function() {
Ember.LinkView.reopen({
attributeBindings: ['data-toggle', 'data-placement', 'title']
});
})
});
我收到错误消息:
val x = (3+1 before 4+1)
可能出现什么问题?
根据马特的回答,我应该使用
Standard ML of New Jersey v110.78 [built: Sun Apr 26 01:06:11 2015]
- stdIn:1.11-1.25 Error: operator and operand don't agree [overload conflict]
operator domain: [+ ty] * unit
operand: [+ ty] * [+ ty]
in expression:
(3 + 1 before 4 + 1)
-
我还发现val x = (3+1 before print "<end>")
用于在处理一些FileIO函数后关闭流。
before
答案 0 :(得分:4)
从here开始,它表示before
的类型为before : ('a * unit) -> 'a
,并且正如您的类型错误所指定的那样,它期望第二个参数的类型为{{1}类型但是,你提供了unit
类型的东西。尝试int
,你应该得到预期的结果。预期目的是让第二个参数成为影响计算的某种方面,例如操作val x = (3+1 before ())
单元格或执行某些IO,您希望在评估第一个参数之前运行它。似乎以下是相同的:
ref
和
val x = e1 before e2
那就是说val x = let val a = e1
val _ = e2
in a end
不是我真正使用的东西,所以如果其他人有任何东西可以添加,那么评论肯定是受欢迎的。