ML中之前的用法

时间:2015-08-06 14:21:10

标签: sml ml

以前的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

1 个答案:

答案 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 不是我真正使用的东西,所以如果其他人有任何东西可以添加,那么评论肯定是受欢迎的。