Przede wszystkim chodzi o to, że pozwala na inną składnię, która jest szeroko stosowana przez programistów ruby. Wielkimi literami są Klasy lub Stałe (dzięki sepp2k), ale próbujesz uczynić z tego obiekt. I prawie nikt nie używa {}
do zaznaczania bloku wielowierszowego.
a = Object.new
if (something happens)
# do something
end
Nie jestem pewien, co jest Twoje pytanie, ale mam pomysł, a to byłoby rozwiązanie:
Jeśli wiesz, co przypisuje że klasa może mieć, i to między innymi należy użyć
class YourClass
attr_accessor :age
end
attr_accessor :age
jest skrótem od:
def age
@age
end
def age=(new_age)
@age = new_age
end
teraz można zrobić coś LIK e to:
a = YourClass.new
if (some condition)
a.age = new_value
end
Jeśli chcesz zrobić to całkowicie dynamiczny można zrobić coś takiego:
a = Object.new
if (some condition)
a.class.module_eval { attr_accessor :age}
a.age = new_age_value
end
używanie stolic do klasy nie jest "składnią" ruby, ale powszechną konwencją. Już ci mówiłem - nie jestem jeszcze zbytnim rubinem. Przy okazji Twoje rozwiązanie działa wystarczająco dobrze dla mnie. Dzięki. –
Wiem, że to powszechna konwencja, dlatego napisałem: "Wielkimi literami powinny być ** Klasy" i zobaczyłem, że jesteś nowy w Ruby, więc pomyślałem, że pokażę ci, jak zrobi to większość programistów ruby. A składnia dotyczyła paranteza bloku jeśli: – jigfox
@Nikhil: Właściwie to * jest *, a nie kwestią konwencji.Każdy identyfikator zaczynający się od dużej litery jest stałą w rubinie. Zatem 'a = Object.new' i' A = Object.new' robią zbyt różne rzeczy (pierwsza definiuje zmienną lokalną, a druga stałą globalną). – sepp2k