Ruby方法之间的区别

时间:2017-10-08 09:18:21

标签: ruby

写作

之间有什么区别
{'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

我应该何时使用一种形式?

2 个答案:

答案 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