On Saturday, January 24, 2015 at 1:13:55 PM UTC+10, Kirill Ignatiev wrote: > > I see nothing about this in > http://julia.readthedocs.org/en/latest/manual/metaprogramming/#macro-invocation > > What's the logic behind reading macro arguments like this? Is it supposed > to be this way? I found this syntax confusing. >
Yes. 1,2,3 syntax creates a tuple as you found out, see http://julia.readthedocs.org/en/latest/stdlib/punctuation/ the comma isn't an argument separator for macros, only functions. Its the lack of commas for macro argument separation that allows syntax like "@parallel for i=1:100000000". The arguments to macros are expressions. So the argument separator is whitespace *where it separates expressions*, so spaces within the tuple list don't count since its a single expression. Cheers Lex > > julia> macro test(args...); @show args; args[1]; end > > julia> @test 1, 2, 3, 4 > args = (:((1,2,3,4)),) > (1,2,3,4) > > julia> @test 1 2, 3, 4 > args = (1,:((2,3,4))) > 1 > > julia> @test 1 2 3 4 > args = (1,2,3,4) > 1 > > julia> @test 1, 2 3 4 > args = (:((1,2)),3,4) > (1,2) > > julia> @test 1, 2 3, 4 > args = (:((1,2)),:((3,4))) > (1,2) > >
