First, because it's a total gotcha that putting something in parentheses changes its meaning. In Matlab, things are so inconsistent in terms of where you can and can't use various syntaxes, that this is hardly the biggest issue, but Julia's pretty consistent and this is the *only* place in the language where parentheses have such an effect. Second, one really ought to avoid dynamically looking up fields like this – the code generated for the field lookup is slow and the system doesn't know what type of value is returned so it completely destroys type inference. Giving it its own syntax just encourages using it. Sure, sometimes you might *really* want to do this despite the drawbacks, but in that case using the getfield(foo,:bar) syntax for it is just fine.
On Tue, Mar 25, 2014 at 2:07 PM, J Luis <[email protected]> wrote: > > > Terça-feira, 25 de Março de 2014 17:47:28 UTC, Stefan Karpinski escreveu: > >> You just need to convert the string to a symbol first: >> >> julia> type Foo >> bar >> baz >> end >> >> julia> foo = Foo(1,2) >> Foo(1,2) >> >> julia> foo.("bar") >> ERROR: type: getfield: expected Symbol, got ASCIIString >> >> julia> foo.(symbol("bar")) >> 1 >> >> > I would ... swear that I had tried that too > > >> >> The feature is likely to be removed rather than expanded. >> > > Why? It brings a potentially very useful behavior. > Better still would be to have the (symbol("bar") be done automatically > > > >> >> >> On Tue, Mar 25, 2014 at 1:36 PM, J Luis <[email protected]> wrote: >> >>> >>> This is a somewhat dubious feature borrowed from Matlab. I think we >>>> should deprecate and then drop it. >>>> >>> >>> That furthermore does not work like the Matlab one ... but would be nice >>> if it did >>> >>> >>> >>>> >>>> >>>> On Mon, Mar 24, 2014 at 11:01 PM, Sam L <[email protected]> wrote: >>>> >>>>> After some experimentation, it looks like second way takes a symbol or >>>>> variable who's value is a symbol. >>>>> >>>>> julia> type MyType; a::Int; end >>>>> >>>>> julia> x = MyType(3) >>>>> MyType(3) >>>>> >>>>> julia> x.a >>>>> 3 >>>>> >>>>> julia> x.(a) >>>>> ERROR: a not defined >>>>> >>>>> julia> x.(:a) >>>>> 3 >>>>> >>>>> julia> b = :a >>>>> :a >>>>> >>>>> julia> x.(b) >>>>> 3 >>>>> >>>>> >>>>> On Monday, March 24, 2014 7:46:38 PM UTC-7, J Luis wrote: >>>>>> >>>>>> The doc of getfield says >>>>>> >>>>>> getfield(*value*, *name::Symbol*) >>>>>> >>>>>> Extract a named field from a value of composite type. The syntax a.bcalls >>>>>> getfield(a, :b), and the syntax a.(b) calls getfield(a, b). >>>>>> >>>>>> but when I try the a.(b) variation, it errors (or it's me who errors?) >>>>>> >>>>>> julia> gmt_modules.write >>>>>> "<?I,>?O" >>>>>> >>>>>> julia> gmt_modules.(write) >>>>>> ERROR: type: getfield: expected Symbol, got Function >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>> >>
