正数/负数之和语法错误

wna*_*men 0 ruby algorithm

所以我目前正在处理代码大战中的以下问题:

返回一个数组,其中第一个元素是正数的数量,第二个元素是负数的总和.如果输入数组为空或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)

任何人都可以解释为什么会发生这种情况吗?

tad*_*man 7

正如人们已经指出这里的错误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)

  • @SteveTurczyn如果你对`negative?'进行分区,则0与正数(有效非负数)进行分组,而如果你对正数进行分区,则将0与负数分组(有效,非正数).从技术上讲,0应该不包含在_either_分组中,但是负数用于计算总和,而0则没有影响.对于肯定,你正在计算一个计数,如果你的计数中包含0,你就会得到错误的答案. (3认同)
  • 0确实响应`positive?`和`negative?`,它在两种情况下都返回`false`,这意味着当与`partition`一起使用时,0总是被集中在not-satisfied-array中. (2认同)
  • @SteveTurczyn,记住你可以使用`1.method(:negative?).owner => Numeric`.实际上,`4168.method(:negative?)#=>#<Method:Fixnum(Numeric)#negative?>`就足够了,因为当它没有在接收者的类中定义时,所有者显示在括号中(如此处所示). (2认同)