所以我目前正在处理代码大战中的以下问题:
返回一个数组,其中第一个元素是正数的数量,第二个元素是负数的总和.如果输入数组为空或null,则返回一个空数组.
我提出了以下代码,它不漂亮,但我知道它应该工作:
def count_positives_sum_negatives(lst)
pos, neg = 0, 0
lst.each do |num|
if num < 0
neg += num
else
pos++
end
end
[pos, neg]
end
Run Code Online (Sandbox Code Playgroud)
然后我调用以下测试:
count_positives_sum_negatives([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15])
Run Code Online (Sandbox Code Playgroud)
它应该返回=> [10,-65]
但是它返回以下错误:
(repl):11: syntax error, unexpected keyword_end
(repl):17: syntax error, unexpected end-of-input, expecting keyword_end
..., 10, -11, -12, -13, -14, -15])
...
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么会发生这种情况吗?
正如人们已经指出这里的错误x++是无效的Ruby,x +=1而是你需要的.后缀和前缀增量运算符在大多数语言中都是一个混乱的点,因此Ruby从未实现过.如,结果是x++ + x++ + ++x什么?
这是一个不同的策略,partition首先拆分数组,然后使用inject以下方法将它们合并:
positives, negatives = list.partition(&:positive?)
[ positives.length, negatives.inject(0, &:+) ]
# => [10,-65]
Run Code Online (Sandbox Code Playgroud)