@richard Вы можете использовать краткий синтакс getter и setter: attr_accessor или вручную создать getter и setter в Ruby, ниже пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Короткая версия class User attr_accessor :username def initialize(username) @username = username end end user = User.new('dmitrypro77') # Вывод: dmitrypro77 print(user.username) # вызов getter user.username = "test" # вызов setter # Вывод: test print(user.username) # вызов getter |
Если Вы хотите создать getter и setter (может быть полезно если какая то дополнительная логика в setter или getter):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Полная версия class User def initialize(username) @username = username end def username # GETTER @username end def username=(name) # SETTER @username = name end end |
@richard
В Ruby getter и setter могут быть созданы с помощью специальных методов attr_reader
, attr_writer
и attr_accessor
.
attr_reader
создает только getter, который позволяет получить значение переменной экземпляра класса, но не изменять ее. Пример:
1 2 3 4 5 6 7 8 9 10 |
class MyClass attr_reader :my_variable def initialize(value) @my_variable = value end end obj = MyClass.new("Hello") puts obj.my_variable #=> "Hello" |
attr_writer
создает только setter, который позволяет изменять значение переменной экземпляра класса, но не получать ее значение. Пример:
1 2 3 4 5 6 7 8 9 10 11 |
class MyClass attr_writer :my_variable def do_something @my_variable = "World" end end obj = MyClass.new obj.my_variable = "Hello" puts obj.do_something #=> "World" |
attr_accessor
создает и getter, и setter, позволяя получить и изменять значение переменной экземпляра класса. Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class MyClass attr_accessor :my_variable def do_something @my_variable = "World" end end obj = MyClass.new obj.my_variable = "Hello" puts obj.my_variable #=> "Hello" obj.do_something puts obj.my_variable #=> "World" |
Также возможно создать getter и setter с помощью обычных методов. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class MyClass def my_variable @my_variable end def my_variable=(value) @my_variable = value end end obj = MyClass.new obj.my_variable = "Hello" puts obj.my_variable #=> "Hello" |
Но использование методов attr_reader
, attr_writer
и attr_accessor
более предпочтительно, так как это более простой и понятный способ создания getter и setter в Ruby.