This is great. I assume it catches "for i in n" where n is a scalar, also, 
right?

I could see requiring this by default in all my packages.

On Wednesday, December 2, 2015 at 1:49:22 AM UTC-8, Eric Forgy wrote:
>
> Some more improvements...
>
> julia> n = 5
> 5
>
> julia> for i = n
>        println(i)
>        end
> 5
>
> julia> using strict
>
> julia> for i = n
>        println(i)
>        end
> ERROR: MethodError: `start` has no method matching start(::Type{Number})
>  in start at C:\Users\Eric Forgy\.julia\v0.4\strict\src\strict.jl:24
>
>
> On Wednesday, December 2, 2015 at 12:05:07 PM UTC+8, Eric Forgy wrote:
>>
>> It's a start :)
>>
>> https://github.com/EricForgy/strict.jl
>>
>>
>> julia> using strict
>>
>> julia> a = 5
>> 5
>>
>> julia> a[1]
>> ERROR: MethodError: `getindex` has no method matching getindex(::Type{
>> Number}, ::Type{Integer})
>> Closest candidates are:
>>   getindex(::Type{T}, ::Any...)
>>   getindex{T<:Union{Char,Number}}(::Type{T<:Union{Char,Number}}, ::Range{
>> T})
>>   getindex{T<:Union{Char,Number}}(::Type{T<:Union{Char,Number}}, ::Range{
>> T}, ::Range{T}...)
>>  in getindex at C:\Users\Eric Forgy\.julia\v0.4\strict\src\strict.jl:4
>>
>>
>> On Wednesday, December 2, 2015 at 11:02:45 AM UTC+8, Tim Holy wrote:
>>>
>>> Likewise, I do see why this is a little troublesome. It's annoying when 
>>> you 
>>> mean to write `for i = 1:n` but accidentally write `for i = n`; it's not 
>>> always an easy bug to find. 
>>>
>>> --Tim 
>>>
>>> On Tuesday, December 01, 2015 06:38:46 PM Eric Forgy wrote: 
>>> > It bugs me, but only a little, so I won't lose sleep over it :) 
>>> > 
>>> > Then again, I wish Julia had a "strict" mode. In strict mode, the 
>>> language 
>>> > would be more pure mathematically, e.g. scalars have no indices, the 
>>> > transpose of a vector is a covector, etc. This bit me recently because 
>>> if T 
>>> > <: U, then Array{T} is NOT <: Array{U} although as, sub-modules 
>>> > <https://en.wikipedia.org/wiki/Module_(mathematics)>, Tmodule <: 
>>> Umodule. 
>>> > 
>>> > Then again, as I'm learning, if we want Julia to do something bad 
>>> enough, 
>>> > e.g. have a "strict" mode,  we can have it. For example, I could write 
>>> a 
>>> > package "strict.jl" where 
>>> > 
>>> > using strict 
>>> > 
>>> > would kill Base.getindex(::Number) and things like that. That could be 
>>> cool 
>>> > 
>>> > :) 
>>> > 
>>> > On Wednesday, December 2, 2015 at 9:38:50 AM UTC+8, Tim Holy wrote: 
>>> > > On Tuesday, December 01, 2015 03:19:33 PM Eric Forgy wrote: 
>>> > > > A scalar is distinct from a vector so size(a) = () makes sense. 
>>> getindex 
>>> > > 
>>> > > for 
>>> > > 
>>> > > > a scalar does not make sense and should probably be removed on the 
>>> > > 
>>> > > grounds 
>>> > > 
>>> > > > of mathematical elegance :) Any code that depends on referencing a 
>>> > > 
>>> > > scalar 
>>> > > 
>>> > > > via an index is probably flawed in the first place. 
>>> > > 
>>> > > Conversely, there are many people who seem to want Julia to treat 
>>> scalars 
>>> > > and 
>>> > > 1-vectors indistinguishably (ala Matlab). 
>>> > > 
>>> > > For what it's worth, here's a (contrived) example to justify the 
>>> current 
>>> > > behavior: 
>>> > > 
>>> > > function sum_over_dims(A, dims) 
>>> > > 
>>> > >     for d in dims 
>>> > >     
>>> > >         A = sum(A, d) 
>>> > >     
>>> > >     end 
>>> > >     A 
>>> > > 
>>> > > end 
>>> > > 
>>> > > sum_over_dims(A, [2,3]) 
>>> > > sum_over_dims(A, 2) 
>>> > > 
>>> > > Why should I write sum_over_dims(A, [2]) in the latter case? 
>>> > > 
>>> > > Best, 
>>> > > --Tim 
>>>
>>>

Reply via email to