Моя идея - создать вики сообщества для людей, которые приходят с фона java
, потому что, читая много объяснений, я ничего не мог понять, пока я не попробовал пару вещей, и части головоломки начали найти свои места. Но сначала я должен убедиться, что все правильно. Исходя из этого, мне было очень сложно понять, что @variable
может означать две разные вещи.
Вот пример:
class Test
@ins = "gah"
def self.ins
puts @ins
end
def initialize()
@ins = "wtf?"
end
def ins2
puts @ins
end
end
Насколько я понимаю, первая @ins
- это переменная экземпляра объекта, представляющего класс Test
. Второй @ins
является переменной экземпляра в объекте класса Test
.
Теперь все начинает иметь для меня какой-то смысл. Вот несколько примеров:
[14] pry(main)> test.ins2
wtf?
Мы вызываем метод объекта и возвращаем переменную экземпляра объекта.
[15] pry(main)> test.ins
NoMethodError: undefined method `ins' for #<Test:0x000000017d9348 @ins="wtf?">
Мы пытаемся вызвать метод класса через объект, этот метод относится к классу, поэтому мы получаем NoMethodError
[16] pry(main)> Test.ins
gah
Мы вызываем метод класса, поэтому он правильно видит переменную экземпляра объекта класса.
[17] pry(main)> Test.ins2
NoMethodError: undefined method `ins2' for Test:Class
Мы вызываем объектный метод через класс, который является неправильным, поэтому бросаем NoMethodError
.
Все вышесказанное было выполнено с рубином 2.0. Так что я спрашиваю?
- Я правильно понял?
- Я получаю правильную терминологию Ruby?
- Любое реальное использование переменных экземпляра класса, которое имеет смысл в правильно спроектированном приложении? Или это просто лучшие переменные класса @@?