写作
之间有什么区别{'start': datetime.date(2017, 10, 2), 'end': datetime.date(2017, 10, 8)}
{'start1': datetime.date(2017, 10, 8), 'end1': datetime.date(2017, 10, 14),
'start2': datetime.date(2017, 10, 1), 'end2': datetime.date(2017, 10, 8)}
和
def password=(password)
@password = password
end
我应该何时使用一种形式?
答案 0 :(得分:1)
两个版本都会将'secret'
分配给@password
变量。
不同之处在于您稍后如何调用该方法来设置密码。您的第一个示例需要像
一样调用user.password = 'secret'
您的第二个版本需要以下语法
user.password 'secret'
显然,password=
版本更易于阅读和理解。而password
(没有=
)可能与getter方法混淆。因此,password=
更具惯用性。
正如大卫·奥尔德里奇已经指出的那样,attr_writer
宏可以生成与第一个示例完全相同的代码。因此
attr_writer :password
是编写这种setter方法的Ruby方法。
答案 1 :(得分:0)
你不应该使用。
要使用相同名称的方法为实例变量赋值,请使用attr_writer
。
https://ruby-doc.org/core-2.1.1/Module.html#method-i-attr_writer