2014-02-11 4 views
3

나는 (지금 시작된 방금) Julia에 완전히 익숙하다. 어리석은 질문이라도 용서해 주시지 만, 언어를 사랑함에도 불구하고 나는 많은 것을 발견하지 못했다. 훌륭한 디버깅 도움이됩니다.왜 내 형식 생성자가 인식되지 않는가

기본적으로 모든 유형의 Integer (int32, uint8 등 ...)를 포함하는 배열의 입력에서 활성화되는 메소드의 대체 생성자를 정의하려고합니다.

나는이 비교적 간단 할 것이라고 생각하고 다음 썼다 :

type MyType 
    weight_matrices::Array{Array{FloatingPoint}} 

    MyType(layer_sizes::Array{Integer}) = 
     new([ 
      rand(layer_sizes[i], layer_sizes[i+1]) for i in [1:length(layer_sizes)-1] 
     ]) 
end 

을하지만 난 그것을 사용하려고 할 때 :

ERROR: no method MyType(Array{Int64, 1}) 

전환 :

test = MyType([1,2,1]) 

나는 오류 Array{Integer}에서 Array{Int64}까지의 대체 생성자는 proble을 해결합니다. m 것으로 가정하지만, 그 사용법을 멀리 제한하고 싶지는 않습니다.

어떻게하는지에 대한 아이디어가 있으십니까? 어떤 코드 검토도 크게 감사 할 것입니다. 필자는이 코드가 "율리우스"가 아니라고 가정하며, 다른 사람들이이 코드를 더 유용하게 사용할 수 있도록 포인터를 사용합니다.

+1

즉, invariance : https://groups.google.com/forum/#!topic/julia-dev/slxzNLXJdlY. 다른 누군가가 나를 때리지 않았다면, 나는 이것을 내일 답변으로 쓸 수 있습니다. – StefanKarpinski

답변

0

이 작동 :

type MyType  
     weight_matrices::Array{Array{FloatingPoint}} 

     MyType(layer_sizes::Array{Int}) = 
      new([ 
       rand(layer_sizes[i], layer_sizes[i+1]) for i in [1:length(layer_sizes)-1] 
      ]) 
    end 

julia> test = MyType([1,2,1]) 
MyType([ 
1x2 Array{FloatingPoint,2}: 
0.477698 0.454376, 

2x1 Array{FloatingPoint,2}: 
0.318465 
0.280079]) 

줄리아 용기 콘크리트 유형 Int의 배열 추상 형식의 배열의 하위 유형되지이다, 그래서 [1,2,1], 공동 또는 콘트라 변형하지 Integer

(Int는 64 비트 시스템의 Int64, 32 비트 시스템의 Int32) 네이티브 정수 유형의 별칭입니다.

입력 내용이 다른 유형의 정수가되도록하려면 입력 유형 (외부 생성자 사용)

type MyType         
     weight_matrices::Array{Array{FloatingPoint}} 
end 

MyType{T<:Integer}(layer_sizes::Array{T}) = 
      MyType([rand(layer_sizes[i], layer_sizes[i+1]) for i in     [1:length(layer_sizes)-1]]) 

julia> test = MyType([1,2,1]) 
MyType([ 
1x2 Array{FloatingPoint,2}: 
0.28085 0.10863, 

2x1 Array{FloatingPoint,2}: 
0.245685 
0.277009])