Prima di tutto la cosa di rubino è che permette una sintassi diversa, che è ampiamente utilizzato dai programmatori rubino. identificatori capitalizzati sono classi o costanti (grazie a sepp2k per il suo commento), ma si tenta di renderlo un oggetto. E quasi nessuno usa {}
fare segnare un blocco multilinea.
a = Object.new
if (something happens)
# do something
end
Io non sono sicuro di quello che la tua domanda è, ma io ho un'idea, e questo sarebbe la soluzione:
Se si sa che cosa gli attributi che classe può avere, ed è limitato si dovrebbe usare
class YourClass
attr_accessor :age
end
attr_accessor :age
è l'abbreviazione di:
def age
@age
end
def age=(new_age)
@age = new_age
end
Ora si può fare qualcosa lik e questo:
a = YourClass.new
if (some condition)
a.age = new_value
end
Se si vuole fare completamente dinamico si può fare qualcosa di simile:
a = Object.new
if (some condition)
a.class.module_eval { attr_accessor :age}
a.age = new_age_value
end
l'utilizzo di maiuscole per classe non è "sintassi" ruby ma convenzione comune. Te l'ho già detto - non sono ancora un ragazzo rubino. A parte la tua soluzione funziona abbastanza bene per me. Grazie. –
So che questa è una convenzione comune, ecco perché ho scritto "identificatori maiuscoli ** dovrebbero ** essere classi" e ho visto che sei nuovo nel rubino, così ho pensato, ti mostro come la maggior parte dei programmatori di rubini lo farebbero. E la sintassi era sulla parastesi per il blocco if – jigfox
@Nikhil: In realtà è * la * sintassi, non una questione di convenzione.Qualsiasi identificatore che inizia con una lettera maiuscola è una costante in rubino. Quindi 'a = Object.new' e' A = Object.new' fanno cose troppo diverse (la prima definisce una variabile locale, l'altra una costante globale). – sepp2k