我正在尝试Ruby中的 Project Euler中的问题 6(在我尝试学习该语言的过程中),这是我在第一次迭代中提出的:
upto = 10
a = (1..upto).to_a.product((1..upto).to_a)
#a.each{ |x| print "(#{x[0]}, #{x[1]})\n"}
puts a.inject(0) {|sum, x| sum + x[0]*x[1] if (x[0] != x[1])}
不幸的是,这在 Ruby 2.0 上引发了以下错误:
在
block in <main>': undefined method
+' 中表示 nil:NilClass (NoMethodError)
更令人费解的是,当我删除 if 条件时没有遇到错误(这显然给了我错误的答案!)
upto = 10
a = (1..upto).to_a.product((1..upto).to_a)
a.each{ |x| print "(#{x[0]}, #{x[1]})\n"}
puts a.inject(0) {|sum, x| sum + x[0]*x[1]} #if (x[0] != x[1])}
上面给出了以下输出(在打印出 a 的元素之后):
3025
作为调试步骤,我什至打印了 'a' 的内容,以确保没有 nil 元素——结果很好。有人可以解释
- 我在这里做错了什么?
- 为什么当我省略“if”条件时会有所不同,因为错误消息在“+”运算符中,否则会无条件执行?
编辑:获得关于实现相同解决方案的替代、更优雅的方法的评论也很好,因为我想知道 Rubyist 解决这个问题的标准方法!