问题
Considering the ref operator I'm having trouble to understand its application and the sense of the follow instructions:
1.
In this definition what am I defining?
- val ref x=ref 9;
val x = 9 : int
2.
and here what am I doing with ref x:= ref 12?
- val x= ref 8;
val x = ref 8 : int ref
- ref x := ref 12;
val it = () : unit
- x;
val it = ref 8 : int ref
回答1:
val ref x = ref 9 defines x to be 9 - just as if you had written val x = 9. This is because ref is a constructor, so it's pattern matching the value ref 9 against the pattern ref x, which binds x to 9. Of course writing it like this instead of just writing val x = 9 makes very little sense.
When you write ref x := ref 12, you create a new ref (of type int ref ref) that refers to x. You then immediately change that new ref to refer to ref 12 rather than to x. Since the new ref you created is never stored anywhere where you might access, this will have no observable effect.
回答2:
@newacct, @sepp2k I see this is from several years ago, but I found the discussion useful and wanted to contribute this output from Standard ML of New Jersey v110.79 [built: Tue Aug 8 16:57:33 2017]:
- val ref x = ref 9;
val x = 9 : int
来源:https://stackoverflow.com/questions/16134306/usage-of-the-ref-function-in-ml