2014-11-07 54 views
5

türünde bir işlevi katıştırma OOP'da yeniyim.Julia: Oluşturucu

type Person 
     name::String 
     male::Bool 
     age::Float64 
     children::Int 

    end 

    function describe(p::Person) 
     println("Name: ", p.name, " Male: ", p.male) 
     println("Age: ", p.age, " Children: ", p.children) 
    end 


    ted = Person("Ted",1,55,0) 

    describe(ted) 

tip içine gömülü açıklamak işlevi için bir yol var mı: Böyle bir türü ve fonksiyonu var düşünelim. Örneğin bu

ted.describe() 

gibi girdi bir şey alacağı eğer:

Name Ted Male true 
Age 55.0 Children 0 

cevap

4

Julia'ya da yeni geldim ve aynı isteği birkaç defa önce aldım. Aşağıdaki kod ile sorunu çözmek istiyorum Şimdi

,
  Understanding object-oriented programming in Julia – Objects-part 1 yardım etmek teşekkür,

Ben isimsiz Fonction çok hızlı olmadığını biliyorum, ama havai olduğunu düşünüyorum "yazdırma" işlevi için çok kötü değil.

#!/usr/bin/env julia 
type Person 
    name::AbstractString 
    male::Bool 
    age::Float64 
    children::Int 
    describe::Function 
    function Person(name,male,age,children) 
     this = new() 
     this.name = name 
     this.male = male 
     this.age = age 
     this.children = children 
     # anonymous functions are not known to be fast ;-) 
     this.describe = function() describe(this) end 
     this 
    end 
end 

function describe(p::Person) 
    println("Name: ", p.name, " Male: ", p.male) 
    println("Age: ", p.age, " Children: ", p.children) 
end 

ted = Person("Ted",1,55,0) 
# describe(ted) 
ted.describe() 

Ancak 0xMB dediği gibi: Julia'nın yolu değil. Ama ben Ruby, gelen arama sistemi zincirleme yöntemini seviyorum Bu yüzden bir "üye fonksiyon" oluşturmak için kolayca diğer takma oluşturmak için bir sözdizimsel bir gösterici görünecek umuyoruz. Sana `println` bir şeye başvuruları kurmayı unuttuğu düşünüyorum sabit Person` ait geçersiz yeniden tanımlanması: -

Maurice

+0

julia-0.4 uyumluluğu için "String" türünü yalnızca "AbstractString" olarak değiştirdim (kullanımdan kaldırılmış uyarıyı bastırmak için). – mdiam

3

Julia bu nokta işaretini desteklemez. Bu, nesnelerin bir parçası olan diğer nesne yönelimli dillerden farklı olabilir, ancak Julia işlevinde genel olarak veriler üzerinde etkili olduğu düşünülür ve bu nedenle nesne verilerinizde tanımlanmaz.

Örneğiniz güzel.

+0

ben' Hata değerlendiren repl aldık. – ccsv