为什么我总是在初始化方法中获得默认日期



我有一个获取文章和两个日期的类。我在类中的初始化方法如下:

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

问题在哪里?

您从不使用date1date2参数。您可能希望将它们分配给各自的实例变量。

除非您有非常特殊的需要,否则将默认值直接移到实参定义中更容易:

def initialize(articles:, date1: DEFAULT_DATE1, date2: DEFAULT_DATE2)
@articles = articles
@date1 = date1
@date2 = date2
end

相关内容

最新更新