On Thu, Oct 15, 2015 at 10:05 AM, Roger Luo <rogerluo.r...@gmail.com> wrote:
> But what if I want to restrict the number of a array I use?
> if the type is like
>
> type particle
>     pos
> end
>
> and I want to restrict the pos's type to be an Array but the dimension
> should be 1,but do not restrict the Type of the Array
> or is there any other type can act like a vector but not the Array type?

AbstractVector


>
> 在 2015年10月15日星期四 UTC+8下午9:06:32,Yichao Yu写道:
>>
>> On Thu, Oct 15, 2015 at 8:53 AM, Roger Luo <rogerl...@gmail.com> wrote:
>> > I just start to write the program so I may not have any code to post.
>> > I want to define a position of a particle like
>> >
>> > type particle{T}
>> >     pos::T
>> > end
>> >
>> > but I hope the type of pos can be limited rather than the supertype any
>> >
>> > 2015-10-15 20:51 GMT+08:00 Roger Luo <rogerl...@gmail.com>:
>> >>
>> >> It's like what if I want to define a 3-dimension linear space R^3 as an
>> >> abstract type and the Array{Float,3} is a subtype-like type of the
>> >> abstract
>> >> type 3-dimension linear space?
>> >>
>> >> I want a linear space as abstract type and some subtypes that can do
>> >> the
>> >> linear algebra.
>>
>> You can define your abstract type (e.g. R^3 Vector) and also define
>> your custom concrete type (e.g. R^3 Vector for Float64) that is a
>> subtype of it. You cannot change an existing type (like
>> Array{Float64,3}) to be a subtype of any abstract type you define.
>> (Also note that Float is not a type and Array{Float64,3} is a
>> 3-dimensional array and is not a vector in R^3).
>>
>> To restrict a type parameter to your type, simply use,
>>
>> type partical{T<:R3Vector}
>>     pos::T
>> end
>>
>> >>
>> >> 2015-09-25 20:36 GMT+08:00 Yichao Yu <yyc...@gmail.com>:
>> >>>
>> >>> I have some trouble understand your question.
>> >>>
>> >>> On Fri, Sep 25, 2015 at 8:22 AM, Roger Luo <rogerl...@gmail.com>
>> >>> wrote:
>> >>> > Thanks,I've read about the arrays,but just don't know how to define
>> >>> > some
>> >>> > existed type.
>> >>>
>> >>> You cannot redefine a type. Or do you mean how are certain existed
>> >>> types implemented? For that you can just check out the source code.
>> >>>
>> >>> > though a type may be defined as:
>> >>> > type a{T<:Integer}<:Real
>> >>> > xxx
>> >>> > end
>> >>> >
>> >>> > but that's will work in my function.I tried to pass different types
>> >>> > into a
>> >>> > function, so I asked this question.
>> >>> > still do not understand why can define a existed type become a
>> >>> > subtype
>> >>> > of
>> >>> > some other type?
>> >>>
>> >>> You cannot change the type inheritance of an existing type, period. As
>> >>> Mauro pointed out, you are probably looking for something else. It
>> >>> would be better if you can post the original problem you are trying to
>> >>> solve.
>> >>>
>> >>> >
>> >>> > 2015-09-25 15:11 GMT+08:00 Mauro <maur...@runbox.com>:
>> >>> >>
>> >>> >> Julia's parametric types are invariant (except tuples).  To figure
>> >>> >> out
>> >>> >> what that means have a read through
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >> http://docs.julialang.org/en/release-0.4/manual/types/#parametric-composite-types
>> >>> >>
>> >>> >> > How to make Array{BigFloat,1}<:Array{Real,1}?
>> >>> >>
>> >>> >> This is always false (that is invariance).  But presumably you want
>> >>> >> a
>> >>> >> method which takes any Array with eltype<:Real, try something like:
>> >>> >>
>> >>> >> julia> f{T<:Real}(ar::Array{T,1}) = typeof(ar)
>> >>> >> f (generic function with 1 method)
>> >>> >>
>> >>> >> julia> f(Array(BigFloat, 2))
>> >>> >> Array{BigFloat,1}
>> >>> >
>> >>> >
>> >>
>> >>
>> >

Reply via email to