Please don't put words in my mouth, I did not say that. In general, I
find "use case" an elusive concept. I prefer simple building blocks with
clear semantics that I can combine easily to solve problems.

Also, whether something "makes sense" is also somewhat subjective and
depends on your expectations and prior experience. Coming from, say,
Common Lisp, Julia's semantics in this case make perfect sense. Coming
from other languages, you may find it surprising, but that's always part
of learning a new language. My own preference is to write quite a bit of
code in a language before commenting on whether certain features "make
sense", but YMMV.

On Tue, Sep 13 2016, Michele Zaffalon wrote:

> Thank you for your explanation.
>
> In practice you are saying that consistency has led to this consequence
> even though there is no use case, and therefore it makes little sense? I am
> not trying to provoke, it is that I find it easier to internalize the
> concept, once I know the reason behind that concept.
>
>
> On Tue, Sep 13, 2016 at 7:24 AM, Tamas Papp <[email protected]> wrote:
>
>> Fill behaves this way not because of a specific design choice based on a
>> compelling use case, but because of consistency with other language
>> features. fill does not copy, and arrays are passed by reference in
>> Julia, consequently you have the behavior described below.
>>
>> IMO it is best to learn about this and internalize the fact that arrays
>> and structures are passed by reference. The alternative would be some
>> DWIM-style solution where fill tries to figure out whether to copy its
>> first argument or not, which would be a mess.
>>
>> On Tue, Sep 13 2016, Michele Zaffalon wrote:
>>
>> > I have been bitten by this myself. Is there a user case for having an
>> array
>> > filled with references to the same object? Why would one want this
>> > behaviour?
>> >
>> > On Tue, Sep 13, 2016 at 4:45 AM, Yichao Yu <[email protected]> wrote:
>> >
>> >>
>> >>
>> >> On Mon, Sep 12, 2016 at 10:33 PM, Zhilong Liu <[email protected]>
>> >> wrote:
>> >>
>> >>> Hello all,
>> >>>
>> >>> I am pretty new to Julia, and I am trying to perform push and pop
>> inside
>> >>> an array of 1D array elements. For example, I created the following
>> array
>> >>> with 1000 empty arrays.
>> >>>
>> >>> julia> vring = fill([], 1000)
>> >>>
>> >>
>> >>
>> >> This creates an array with 1000 identical object, if you want to make
>> them
>> >> different (but initially equal) object, you can use `[[] for i in
>> 1:1000]`
>> >>
>> >>>
>> >>> Then, when I push an element to vring[2],
>> >>>
>> >>>
>> >>> julia> push!(vring[2],1)
>> >>>
>> >>>
>> >>> I got the following result. Every array element inside vring gets the
>> >>> value 1. But I only want the 1 to be pushed to the 2nd array element
>> >>> inside vring. Anybody knows how to do that efficiently?
>> >>>
>> >>>
>> >>> julia> vring
>> >>>
>> >>> 1000x1 Array{Array{Any,1},2}:
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  ⋮
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>  Any[1]
>> >>>
>> >>>
>> >>>
>> >>> Thanks!
>> >>>
>> >>> Zhilong Liu
>> >>>
>> >>>
>> >>>
>> >>>
>> >>
>>
>>

Reply via email to