2014-10-11 26 views
5

Tôi đang cố tạo loại "số nguyên mod p" trong Julia. (Tôi chắc rằng có đã là một gói cho điều này, nó chỉ là một bài tập cá nhân.)Tham chiếu tham số kiểu dưới dạng tham số hàm trong Julia

type Intp{p} 
    v::Int8 
end 

function add(a::Intp{p},b::Intp{p}) 
    return Intp{p}((a.v + b.v) % p) 
    end 

Tôi nhận được một lỗi khi xác định các add nói rằng p không được định nghĩa. Làm thế nào để tôi tham khảo p từ bên trong thêm?

(Lưu ý:. Tôi có thể làm điều gì đó như

type Intp 
    v::Int8 
    p 
end 

function add(a::Intp,b::Intp) 
    return Intp((a.v + b.v) % a.p,p) 
    end 

nhưng điều này sẽ đòi hỏi rằng p được lưu trữ với mỗi số duy nhất tôi cảm thấy như thế này sẽ không hiệu quả, và tôi có tâm trí của tôi trên khái quát nơi nó sẽ thực sự không hiệu quả. Tôi muốn p chỉ được chỉ định một lần, đối với loại, và được tham chiếu trong các chức năng lấy thứ đó làm đối số.)

Trả lời

7

Ví dụ đầu tiên của bạn rất gần, nhưng bạn cần phải bao gồm {p} giữa tên phương thức và chữ ký như sau:

function add{p}(a::Intp{p},b::Intp{p}) 
    return Intp{p}((a.v + b.v) % p) 
end 

Nếu không, bạn đang viết một phương pháp cho một cặp Intp{p} giá trị nơi p là bất cứ điều gì giá trị cụ thể hiện nay của p có thể - trong đó, trường hợp của bạn, sẽ xảy ra là không có giá trị gì cả, vì thế mà thông báo lỗi. Vì vậy, chữ ký chung của một phương pháp Julia là:

  1. tên phương pháp
  2. thông số gõ vào { } (không bắt buộc)
  3. luận trong ()
+1

Cảm ơn bạn Stefan. Tôi thích ngôn ngữ của bạn. –

Các vấn đề liên quan