In case you REALLY need the eval, you should consider abandoning 
parse(str::String) for a quoted expression with :()

eval(:(x.$nm = newval[$nm])) 

Ivar

kl. 21:50:09 UTC+2 lørdag 21. juni 2014 skrev Florian Oswald følgende:
>
> beautiful! thanks.
>
>
> On 21 June 2014 20:41, Mauro <[email protected] <javascript:>> wrote:
>
>> Check getfield and this also works:
>>
>> julia> type A
>>        a
>>        b
>>        end
>>
>> julia> d = {:b => 3, :a=>5}
>> Dict{Any,Any} with 2 entries:
>>   :b => 3
>>   :a => 5
>>
>> julia> a = A(-1,-2)
>> A(-1,-2)
>>
>> julia> for (k,v) in d
>>        a.(k) = v
>>        end
>>
>> julia> a
>> A(5,3)
>>
>> (You should only use eval in an emergency or when doing meta-programming.)
>>
>> On Sat, 2014-06-21 at 20:23, [email protected] <javascript:> wrote:
>> > hi,
>> > I've got a type and I want to be able to update certain fields of the 
>> type
>> > under the restriction that I don't know when I will be changing with 
>> field
>> > - i.e. I want to be able to do someting like the following. take the
>> > example type tt with 2 fields, a and b, and a dict "newval" that 
>> contains
>> > new values for both fields. I want to iterate over newval, and put
>> > newval[j] in tt.j. how can I do this? Here's how far I got.
>> >
>> > type tt
>> > a ::Int
>> > b ::Int
>> > end
>> >
>> > function update(x::tt,newval::Dict)
>> > dnames = collect(keys(newval))
>> > for nm in dnames
>> > eval(parse("x.$nm = newval[$nm]"))
>> > end
>> > return x
>> > end
>> > thanks!
>>
>>
>

Reply via email to