В настоящее время мы пытаемся изучить учебник rspec и будем очень благодарны за некоторые разъяснения.Ruby: Методы и инициализация классов
Кодекс:
class Book
attr_reader :title
def initialize(title=nil)
@title = title = title && title.capitalize!
end
def title=(new_title = nil)
@title = new_title && new_title.each do |word|
word.capitalize!
end
end
Два вопроса:
Почему существуют два набора
@title
(то есть: почему это определено в обоихinitialize
иtitle
как набор = к различным вещи)?Почему метод
title
имеет после него=
? Код ломается, если я не использую=
.
редактировать: для целей моего RSpec учебник это код, я наконец-то попробовал, что работал
class Book
attr_accessor :title
def initialize(title = nil)
@title = title
end
def title=(book_title = nil)
@title = book_title.capitalize
end
end
Моя первая проблема была с заглавной = метод. Наконец, я наткнулся на поток, который объясняет, что такое функция method =. Это необходимо, если вы хотите присвоить значение чему-то в методе класса (по крайней мере, это мое понимание на данный момент. Не стесняйтесь исправлять меня).
Буду признателен за любые советы в этом новом коде.
Очень полезно (мне нужно будет его прочитать несколько раз, но он уже начинает помогать мне понять). Уточнение: обе ошибки, которые вы указали, были мной, написав следующую часть кода. Я забыл изменить его в своем первоначальном формате, прежде чем опубликовать (извините! И спасибо за исправление: D). –
Мой код больше не работает. Когда я удалил оценки короткого замыкания, как в ваших примерах, он полностью сломался. мой код класс 'Book' ' attr_reader: title' определение функции инициализации (название = ноль) '' @title = title.capitalize' 'end' ' название DEF = (NEW_TITLE = ноль) ' ' @title = new_title' 'end' ' end' Я также пробовал его с помощью 'new_title.split ('') .each do | word | word.capitalize конец ' а также 'new_title.each_char do | word | word.capitalize end ' –
Я не думаю, что вы можете сократить код так, как у вас есть. Переход от '@title = title = title && title.capitalize!' К '@title = title.capitalize' теперь генерирует исключение, если' title' равно нулю. Для метода 'title =' удаление части капитализации означает, что 'new_title' не получает заглавные буквы. Кроме того, вам нужно «присоединить» строку разделения (иначе @title станет массивом вместо строки). –