我有一个获取文章和两个日期的类。我在类中的初始化方法如下:
def initialize(articles:, date1: nil, date2: nil)
@articles = articles
@date1 ||= DEFAULT_DATE1
@date2 ||= DEFAULT_DATE2
end
我不知道为什么我的@date1和@date2有DEFAULT_DATE值,即使我发送这样的参数:
Example.new(articles: articles, date1: '2021-10-10', date2: '2021-10-11')
问题在哪里?
您应该检查您收到的参数,然后相应地分配。
把代码改成这样就可以了
def initialize(articles:, date1: nil, date2: nil)
@articles = articles
@date1 = date1 || DEFAULT_DATE1
@date2 = date2 || DEFAULT_DATE2
end
问题和解释:
当你这样做时
@date1 ||= DEFAULT_DATE1
它检查@date1
是否有任何值(它没有),所以你得到DEFAULT_DATE1
分配给@date1
问题在哪里?
您从不使用date1
和date2
参数。您可能希望将它们分配给各自的实例变量。
除非您有非常特殊的需要,否则将默认值直接移到实参定义中更容易:
def initialize(articles:, date1: DEFAULT_DATE1, date2: DEFAULT_DATE2)
@articles = articles
@date1 = date1
@date2 = date2
end