regarding 1 === 1, this is true of any immutable "isbits" type. Julia doesn't actually allocate an object for that in memory, it is simply a value (aka a value-type), and as such it is always compared by value, never by address.
On Thu, Sep 11, 2014 at 8:47 PM, <[email protected]> wrote: > > The binding of the argument to the function can never change, though the > values of that binding might. > > It you be more correct to say that a method cannot change the binding of > its arguments. You can change bindings, you just can't do it inside of a > method because of scoping rules. It's just as you said in your second point. > > > Is this how julia handles values and bindings, or it there more to this > picture? > > You seem to have understood it correctly. > > > Your surprise may actually come from the fact that you read > `[1,2,3] == [1,2,3]` > while it was actually > `[1,2,3] === [1,2,3]` > > The three equal signs represent a strong equality: the mathematical > equality is not sufficient; the objects actually need to be the same, they > should correspond to exactly the same data in memory, the same address. > > This is precisely what you demonstrated. > > > > I'm a bit more surprised with the first statement: 1 === 1. I guess Julia > wouldn't allocate two different ojects in memory for that, maybe LLVM just > replaces that with "true" directly. But I find it surprising because this > kind of equality is only meaningful if you are comparing variables, not > values. > > I'm also wondering if `==` is required by `===`: would two view of the > same array be ===-equal? Even if the first one sees the data as Int64 while > the second one sees them as Float64? > > I guess I'll have to spend 20 seconds on that tomorrow. >
