如果可以被4整除,我想将天数加到366,如果不是则可以加365。为什么
amountOfDays = 0
for i in 0..100
i % 4 == 0 ? amountOfdays += 366 : amountOfdays += 365
end
不行吗?它说undefined method + for nil:NilClass
。
我怎样才能让它发挥作用?
答案 0 :(得分:3)
因为您没有定义amountOfDays = 0
,amountOfdays = 0
。两者都是不同的变量。可能是错字。在所有情况下使用其中的任何一个。
喜欢
amountOfdays = 0
for i in 0..100
(i % 4 == 0) ? amountOfdays += 366 : amountOfdays += 365
end
正确命名将使用Ruby - amount_of_days
而不是amountOfdays
。或者语法上更有声音number_of_days
。
以更多Ruby方式 -
number_of_days = (0..100).reduce(0) { |tot,i| tot + ((i%4 == 0) ? 366 : 365) }
#=> 36891
答案 1 :(得分:1)
您的代码中存在拼写错误。在顶部设置amountOfDays
(大写字母D),然后使用amountOfdays
。 Ruby将变量初始化为nil
,因为它被分配给(是的,在这种情况下它有点奇怪)。例如:
a += 10
# NoMethodError: undefined method `+' for nil:NilClass
而不是
a + 10
# NameError: undefined local variable or method `a' for main:Object
哪种诊断会更容易。
此外,您使用(i % 4)
表达式,因为它返回了一个布尔值,但它返回一个数字。在ruby中,除false
和nil
之外的所有内容都评估为true
("真实的",实际上),因此您的情况永远不会错误。
最后,由于您使用的是三元组,因此您可以使用它们是表达式的事实:
amountOfDays = 0
for i in 0..100
amountOfDays += (i % 4) == 0 ? 366 : 365
end
并且,如果你想要更加惯用(在ruby中使用for
循环非常罕见):
amount_of_days = (0..100).map { |year| year % 4 == 0 ? 366 : 365 }.reduce(:+)