> What is Expr(:<:, :X, :Int) supposed to mean?
It's part of a function definition:
:(f{X<:Int}(x::X) = 5).args[1].args[1].args[2]
I came across this when doing unit testing for a function which picks a
function definition apart:
julia> parsef(fn) = fn.args[1].args[1].args[2]
parsef (generic function with 1 method)
julia> fn = :(f{X<:Int}(x::X) = 5)
:((f{X<:Int})(x::X) = 5)
julia> parsef(fn)
:(X<:Int)
julia> @test parsef(fn)==:(X<:Int)
ERROR: test failed: (X<:Int == X <: Int)
julia> @test parsef(fn)==Expr(:<:, :X, :Int)
# passes test
>
> I just get an AST error when trying to evaluate that expression, so it
> can't be very usefull
>
> julia> eval(Expr(:<:, :Int64, :Int))
> ERROR: unsupported or misplaced expression <:
>
> We should probably consider erroring out when printing invalid expressions.
>
> Regards
> Ivar
>
> kl. 11:05:34 UTC+2 tirsdag 21. oktober 2014 skrev Mauro følgende:
>>
>> This seems a bit confusing:
>>
>> ```
>> julia> Expr(:<:, :X, :Int)
>> :(X<:Int)
>>
>> julia> Expr(:<:, :X, :Int).head
>> :<:
>>
>> julia> :(X<:Int)
>> :(X <: Int)
>>
>> julia> :(X<:Int).head
>> :comparison
>> ```
>>
>> Is this intentional? This also means that copy-pasting the string
>> representation of `Expr(:<:, :X, :Int)` does not yield itself.
>>