我的课程Book
包含实例变量title
和方法title
class Book
attr_accessor :title
def title(title)
@title = title.capitalize
end
end
我创建了一个图书对象
b = Book.new
然后我设置了标题
b.title("inferno")
现在,当我尝试打印标题字段变量值
时p b.title
Ruby认为我正在尝试调用方法
“title”:参数数量错误
知道如何打印字段变量值吗?
由于
答案 0 :(得分:5)
所有attr_accessor :title
都会创建包装方法,与def title()
和def title=(value)
相同。它只是一个语法糖方法生成。然后,您可以使用以下值设置值:
b.title = "Whatever"
并访问:
b.title
如果您只是想要读者或作者,可以单独使用attr_reader :title
或attr_writer :title
。
如果您想手动制作自己的读写器方法,以上所有操作都是创建:
def title
@title
end
def title=(value)
@title = value
end
Ruby中不能有两个具有相同名称和不同arity的方法,因此当您定义自己的方法时(如在您的问题中),您将使用您的编写器覆盖reader方法。这让你有两种设置方式,无法阅读。
您可以使用attr_reader
和自定义编写器:
def title=(value)
@title = value.capitalize
end
您始终可以根据需要为方法命名,例如def capitalize_and_set_title(value)
。它可能比attr_accessor
和运算符重载的魔力更清晰。
答案 1 :(得分:0)
我认为你想要设置标题的是:
def title=(str)
super str.try(:capitalize)
end
答案 2 :(得分:0)
如果您希望能够使用title(some_value)
设置值并使用title
(不带参数)进行读取,则可以执行以下操作:
class Book
def title(title = :no_value_given)
if title == :no_value_given
@title
else
@title = title.capitalize
end
end
end
当你不带参数调用它时,它依赖于默认参数值。
我没有使用nil
作为默认参数值的原因是您可以将值设置为nil
。