I believe you want
d[:d] = 2
Peter.
On Thursday, May 14, 2015 at 1:25:58 PM UTC-6, Edward Chen wrote:
>
> To whom it may concern:
>
> I am having trouble adding elements to my dictionary and then passing it
> into a function:
>
> function f(;kw...)
> for (k,v) in kw
> println(k,",",v)
> end
> end
> d = {:a => 1, :b => "c"} # this works
> # d = Dict() # but this line
> # d["d"] = 2 # with this fails
> f(;d...)
>
> Thanks,
> Ed
>
> On Tuesday, October 15, 2013 at 9:46:17 PM UTC-4, Jeff Bezanson wrote:
>>
>> Although converting a string to a symbol is reasonably efficient, it's
>> too much extra work to do for something like a function call where every
>> cycle counts. You could easily end up doing this work repeatedly, for each
>> one of many calls. It also might lead somebody to think strings are equally
>> valid in this context, and use them exclusively, which I would consider a
>> performance trap.
>> On Aug 7, 2013 3:04 PM, "Westley Hennigh" <[email protected]> wrote:
>>
>>> I think the issue is transparency for the user. If they have a
>>> dictionary and get an error when they call (I kind of like Elliot's
>>> name) `dictsplat()`, it's pretty obvious what the problem is. If they just
>>> use the dictionary of strings and we do the conversion for them it might
>>> not be as clear.
>>>
>>> On Wednesday, August 7, 2013 12:55:42 AM UTC-7, Ivar Nesje wrote:
>>>>
>>>> What is the problem with having minus or space in a symbol? You'd have
>>>> to generate the code using Expr() and symbol("var-with minus&space"), as
>>>> the parser uses those characters as delimiters when it parses code. Errors
>>>> should be given when you use a dictionary with keys that does not match
>>>> the
>>>> keyword arguments of the function, so there is no reason to give a
>>>> different error if some of the characters should be invalid.
>>>>
>>>> Ivar
>>>>
>>>> kl. 07:40:50 UTC+2 tirsdag 6. august 2013 skrev Elliot Saba følgende:
>>>>>
>>>>> One of the problems with this is that strings have quite a bit more
>>>>> leeway in what they can contain than symbols. What happens if your
>>>>> strings
>>>>> have spaces? Or minus symbols? Getting an error from the `symbol()`
>>>>> function while trying to splat a dictionary seems like it might be
>>>>> confusing.
>>>>>
>>>>> If doing this conversion automatically wouldn't take too much cpu
>>>>> time, then doing it manually won't take too much cpu time either. :) It
>>>>> should be pretty straightfoward to write e.g. a `dictsplat()` function
>>>>> that
>>>>> converts any string keys to symbols, and throws a meaningful error if
>>>>> they
>>>>> are unable to do so.
>>>>>
>>>>>
>>>>> On Mon, Aug 5, 2013 at 6:38 PM, Westley Hennigh <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Hmm, maybe it is. I'm a partial judge.
>>>>>>
>>>>>> But just to be clear: I don't want to actually modify the dict or
>>>>>> pursue this if it will be considerably slower.
>>>>>>
>>>>>> I do think it's fairly unambiguous. And if you pulled a dictionary
>>>>>> out of some json and wanted to use it as parameters, I think this would
>>>>>> seem pretty straightforward / convenient.
>>>>>>
>>>>>> On Monday, August 5, 2013 6:08:12 PM UTC-7, Jacob Quinn wrote:
>>>>>>>
>>>>>>> Auto-converting strings to symbols in this case seems pretty
>>>>>>> auto-magical (in a bad way). I would just expect the user to call the
>>>>>>> symbol(x) call themselves before passing them in.
>>>>>>>
>>>>>>> -Jacob
>>>>>>>
>>>>>>>
>>>>>>> On Monday, August 5, 2013 8:01:56 PM UTC-5, Westley Hennigh wrote:
>>>>>>>>
>>>>>>>> Ok, I have -perhaps- a slightly more interesting question based on
>>>>>>>> this.
>>>>>>>>
>>>>>>>> In your above example, suppose you have a dict `d = {"x" => 3, "y"
>>>>>>>> => 4}`. Note the strings.
>>>>>>>> If you called your function f with said dict, I think (could be
>>>>>>>> wrong) that what you're after is pretty unambiguous (to treat the
>>>>>>>> strings
>>>>>>>> as symbols). What's more, I think that the conversion between strings
>>>>>>>> and
>>>>>>>> symbols can be pretty cheap.
>>>>>>>>
>>>>>>>> So maybe we could add support for more efficiently calling
>>>>>>>> functions with dictionaries of strings of named args (without
>>>>>>>> generating
>>>>>>>> one containing symbols).
>>>>>>>>
>>>>>>>> I see line 429 in https://github.com/JuliaLang/julia/blob/master/
>>>>>>>> src/julia-syntax.scm, I think dictionaries are being expanded
>>>>>>>> around like 1670 and then passed as an unsorted list. So maybe this
>>>>>>>> wouldn't be more efficient... Not sure, are you more familiar with
>>>>>>>> this
>>>>>>>> code?
>>>>>>>>
>>>>>>>>
>>>>>>>> On Monday, August 5, 2013 5:14:02 PM UTC-7, Westley Hennigh wrote:
>>>>>>>>>
>>>>>>>>> Lol. I apologize for taking your time, thanks!
>>>>>>>>>
>>>>>>>>> On Monday, August 5, 2013 5:08:45 PM UTC-7, Mike Nolta wrote:
>>>>>>>>>>
>>>>>>>>>> ```
>>>>>>>>>> julia> f(;x=0,y=0) = (x,y)
>>>>>>>>>> # methods for generic function f
>>>>>>>>>> f() at none:1
>>>>>>>>>>
>>>>>>>>>> julia> d = {:x => 3, :y => 4}
>>>>>>>>>> {:y=>4,:x=>3}
>>>>>>>>>>
>>>>>>>>>> julia> f(;d...)
>>>>>>>>>> (3,4)
>>>>>>>>>> ```
>>>>>>>>>>
>>>>>>>>>> -Mike
>>>>>>>>>>
>>>>>>>>>> On Mon, Aug 5, 2013 at 8:02 PM, Westley Hennigh
>>>>>>>>>> <[email protected]> wrote:
>>>>>>>>>> > Heh, ya, but I can always pass a dictionary. It would be sweet
>>>>>>>>>> if the names
>>>>>>>>>> > could be broken out so that you can read the defaults and we
>>>>>>>>>> don't end up
>>>>>>>>>> > with big blocks of `get(args, thing, default)` at the top of
>>>>>>>>>> functions.
>>>>>>>>>> >
>>>>>>>>>> > On Monday, August 5, 2013 4:53:55 PM UTC-7, Mike Nolta wrote:
>>>>>>>>>> >>
>>>>>>>>>> >> ```
>>>>>>>>>> >> julia> f(;kw...) = for (k,v) in kw; println(k,",",v); end
>>>>>>>>>> >> # methods for generic function f
>>>>>>>>>> >> f() at none:1
>>>>>>>>>> >>
>>>>>>>>>> >> julia> d = {:a => 1, :b => "c"}
>>>>>>>>>> >> {:b=>"c",:a=>1}
>>>>>>>>>> >>
>>>>>>>>>> >> julia> f(;d...)
>>>>>>>>>> >> b,c
>>>>>>>>>> >> a,1
>>>>>>>>>> >> ```
>>>>>>>>>> >>
>>>>>>>>>> >> -Mike
>>>>>>>>>> >>
>>>>>>>>>> >> On Mon, Aug 5, 2013 at 7:17 PM, Westley Hennigh
>>>>>>>>>> >> <[email protected]> wrote:
>>>>>>>>>> >> > I hope I'm being dense and that this already exists.
>>>>>>>>>> >> >
>>>>>>>>>> >> > I have some pre-named-args julia which -effectively-
>>>>>>>>>> flattens a
>>>>>>>>>> >> > dictionary
>>>>>>>>>> >> > of named things into an ordered tuple of args that are
>>>>>>>>>> passed into a
>>>>>>>>>> >> > function. I'd really like to just use the dictionary as a
>>>>>>>>>> set of named
>>>>>>>>>> >> > args.
>>>>>>>>>> >> > Is that possible?
>>>>>>>>>>
>>>>>>>>>
>>>>>