2014-11-07 22 views
5

Sono nuovo di OOP. Diciamo che ho un tipo e funzione come questa:Julia: Costruttore Incorporamento di una funzione all'interno di un tipo

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) 

C'è un modo per avere la funzione di descrivere incorporato all'interno del tipo. Per esempio, se ho qualcosa di simile ingresso

ted.describe() 

otterrei:

Name Ted Male true 
Age 55.0 Children 0 

risposta

4

Sono nuovo anche per Julia e ho avuto la stessa richiesta alcune volte.

Ora mi piacerebbe risolvere il tuo problema con il seguente codice, grazie all'aiuto da
  Understanding object-oriented programming in Julia – Objects-part 1 ,

So che un fonction anonimo non sono molto veloci, ma io che il sovraccarico è non male per una funzione di "stampa".

#!/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() 

Tuttavia, come 0xMB detto: non è il modo in cui Julia. Ma mi piace il metodo di chiamata del sistema di chiamata da Ruby, Quindi spero che un suggerimento sintattico apparirà un giorno per essere in grado di creare facilmente qualche alias per creare una tale "funzione membro".

- Maurice

+0

Ho modificato il tipo "String" solo in "AbstractString" per la compatibilità con julia-0.4 (per sopprimere l'avviso deprecato). – mdiam

3

Julia non supporta questa notazione del punto. Questo può differire da altri linguaggi orientati agli oggetti in cui i metodi fanno parte dei tuoi oggetti, ma nella funzione Julia si considera che agiscano sui dati in generale e quindi non sono definiti all'interno dei dati degli oggetti.

Il tuo esempio va bene.

+0

ho avuto 'Errore valutazione REPL: valida ridefinizione costante Person' Credo che ti sei dimenticato di impostare i riferimenti su qualcosa in' println'. – ccsv

Problemi correlati