I thought that `foo[i] = x` is a syntax sugar of `setindex!(foo, x, i)` and hence the return values are identical in both cases. This is suggested in a section of the manual: http://julia.readthedocs.org/en/release-0.3/stdlib/collections/#indexable-collections .
setindex!(*collection*, *value*, *key...*) > > Store the given value at the given key or index within a collection. The > syntax a[i,j,...] = x is converted by the compiler to setindex!(a, x, i, > j, ...). > But the following code doesn't work as such: type Foo; end function Base.setindex!(foo::Foo, x, i) return 100 end let foo = Foo() @show (foo[1] = 1) @show (setindex!(foo, 1, 1)) end Actual: foo[1] = 1 => 1 setindex!(foo,1,1) => 100 Expected: foo[1] = 1 => 100 setindex!(foo,1,1) => 100 So my question is which is the intended behavior? I think it is unreasonable for `setindex!` to ignore the specified return value when written as `foo[i] = x` if `foo[i] = x` is really converted to `setindex!(foo, x, i)`.