[英]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.