Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 块变量如何随嵌套数组而变化?_Ruby - Fatal编程技术网

Ruby 块变量如何随嵌套数组而变化?

Ruby 块变量如何随嵌套数组而变化?,ruby,Ruby,我跟在后面 我知道当它通过arr[0]时,首先是kv=cow和I=0,然后是kv=moo和I=1。k,v=kv有什么意义?在我看来,k=kv和v=kv,但事实并非如此。我不明白目的。基本上,线路k,v=kv意味着您正在将kv分配给k或k=kv 逗号分隔赋值只是在一行中赋值多个变量的另一种方式,它只是语法上的糖分 尝试修改代码,并执行如下操作,例如: arr = [["cow", "moo"], ["duck", "quack"]] bucket = arr[0] buck

我跟在后面


我知道当它通过
arr[0]
时,首先是
kv=cow
I=0
,然后是
kv=moo
I=1
k,v=kv
有什么意义?在我看来,
k=kv
v=kv
,但事实并非如此。我不明白目的。

基本上,线路
k,v=kv
意味着您正在将
kv
分配给
k
k=kv

逗号分隔赋值只是在一行中赋值多个变量的另一种方式,它只是语法上的糖分

尝试修改代码,并执行如下操作,例如:

    arr = [["cow", "moo"], ["duck", "quack"]]
    bucket = arr[0]
    bucket.each_with_index do |kv, i|
      k, v = kv, i
      puts "k is #{k} and v is #{v}"
    end
   # k is cow and v is 0
   # k is moo and v is 1

这里发生的是,它将键/值对变量
kv
分解为两个独立的变量
k
v
。您需要将代码调整为如下所示:

arr = [["cow", "moo"], ["duck", "quack"]]
arr.each_with_index do |kv, i|
  k, v = kv
  puts k
  puts v
end
这里发生的事情可以通过以下方式证明:

kv = [ :key, :value ]

# Assign k to the first value, v to the second in kv
k, v = kv

k
# => :key
v
# => :value
一种不那么混乱的方法是:

arr.each_with_index do |(k, v), i|
  # ... Use k and v normally
end
该符号允许您在使用数组之前将其扩展为单独的变量。在处理这种类型的值对时,这是一个很有用的技巧

值得注意的是,如果不使用带有索引的
每个_
,您就不必这样做,因为
每个
在这里就足够了,因为从未使用过该索引值:

each do |k, v|
  # ...
end

不清楚你所说的
k=kv
v=kv
是什么意思。我想他被一行多变量赋值搞糊涂了。希望我的回答能澄清一点。我想你应该有
arr.each_with_index…
。Zed Shaw的教程带有很重的Python口音。这里使用了许多与大多数Ruby样式指南相反的约定,比如在变量名中使用大写字母,在声明方法时使用模块或类名,在方法名中使用
get\uu
。另外,Ruby哈希不是比数组更好吗?这实际上是一个好问题。。。你能给我提供你从中获得代码的链接吗?
每个带有索引do |(k,v),i |
避免添加分线。它是链接的,点击顶部的“教程”。它位于屏幕上名为
def Dict.get_slot
的方法中page@tadman那很有趣。你能解释一下块
|(k,v),i |
吗?这是我第一次看到有人这样做:)@tadman有一个方法调用我引用的代码,该方法特别想要返回
v
。因此,它在运行时实际上不是
nil
。我只是不明白为什么。我怀疑这就是这个例子应该是的,但这不是OP所拥有的。小心
bucket
是什么。它与
arr
@sawa不同,我在我的示例中忘了纠正它。它本来就不应该在那里,所以我把它去掉了。似乎你也有类似的观察。好吧,我试过了,它更有意义。谢天谢地,我只是在文档中找不到任何这样的例子。文档中有很多例子,但是要真正了解所有这些是如何结合在一起的,你可能需要一本更好的Ruby入门书。原文值得一读。我在学习Ruby时发现它非常有价值。
each do |k, v|
  # ...
end