繁体   English   中英

Ruby:Rubeque-使用* n或n很难

[英]Ruby : Rubeque - difficult with *n or n

我正在做http://www.rubeque.com/problems/queue-continuum/solutions/51a26923ba804b00020000df ,我在那里呆了一段时间。 我不明白为什么这段代码没有通过

def initialize(queue)
  @q = queue
end

def pop(n=1)
  @q.shift(n)

end

def push(arr)
  arr.each { |x|
    @q.push(x)
  }
  return true
end

def to_a
  @q
end

但这很好用。

def initialize(queue)
  @q = queue
end

def pop(*n)
  @q.shift(*n)

end

def push(arr)
  @q.push(*arr)
  return true
end

def to_a
  @q
end

我完全困惑

def pop(*n)
  @q.shift(*n)

end

def push(arr)
  @q.push(*arr)
end

为什么我应该将(arr)作为数组并将其更改为... * arr,它是数组的Array? 我很困惑,请帮忙!

Splat有两种工作方式。

接收参数时,它将参数组合到一个数组中。

def foo *args; args end
foo(1) # => [1]
foo(1, 2, 3) # => [1, 2, 3]

提供参数时,它将数组分解为参数。

def bar x, y, z; y end
bar(*[1, 2, 3]) # => 2

def baz x; x end
baz(1) # => [1]
baz(1, 2, 3) # => Error

*arr您想知道的是后一种情况。 它不是像[1, 2, 3]这样的对象(因此,不是数组的数组)。 它是传递给方法的参数(如1, 2, 3 )的一部分。

splats还有其他用途(如数组文字,case语句等),但是它们的功能是上述两种用途之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM