Ruby"不关心变量"与Prolog相同吗?

Ism*_*reu 4 ruby ruby-on-rails

所以我都是Prolog和Ruby的新手.在大学里学习Prolog,在我自己学习Ruby.而且我在想,如果在Prolog中存在Ruby中的"不关心"或"丢弃"变量.

我刚刚打开了irb并且刚刚做了这个(假设下划线是"不关心"的标志)

1.9.2-p290 :003 > _, b, c = [1,2,3]
 => [1, 2, 3] 
1.9.2-p290 :004 > b
 => 2 
1.9.2-p290 :005 > c
 => 3 
Run Code Online (Sandbox Code Playgroud)

结果实际上是我的预期.但后来我很好奇下划线的价值在哪里以及它是什么类

1.9.2-p290 :006 > _
 => 3 
1.9.2-p290 :008 > _.class
 => Fixnum 
Run Code Online (Sandbox Code Playgroud)

嗯,这很奇怪.它不应该把价值扔掉吗?为什么存储其他价值?

然后用下划线做更多测试我看到实际发生了什么,它有最后一个评估值.

1.9.2-p290 :017 > 1
 => 1 
1.9.2-p290 :018 > _
 => 1 
1.9.2-p290 :019 > "string"
 => "string" 
1.9.2-p290 :020 > _
 => "string" 
1.9.2-p290 :021 > Hash
 => Hash 
1.9.2-p290 :022 > _
 => Hash 
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:实际上是什么强调的?它真的是一个不关心变量或其他什么?它的真名是什么?(因为我没有找到很多东西与"不关心红宝石变量"与谷歌)

Chu*_*uck 10

让你失望的是你看到了下划线的两种不同用途.

  1. 在参数列表中,它就像一个"不关心变量",就像在Prolog中一样.

  2. 在参数列表之外,它只是一个普通的标识符.在IRB中,它与先前的结果相关.由于你的上次输入是c = 3,_是3.这只是在IRB中,但是在普通的Ruby程序中不会发生这种情况.


Jör*_*tag 9

  1. 在Ruby 社区中,_意思是"不关心".
  2. 在Ruby 语言中,_没有任何意义,它是一个像其他任何标识符一样的标识符.
  3. 在YARV Ruby 解释器中,"未使用的局部变量"警告被抑制_,因此编码#1中的约定.
  4. IRb中,_绑定到最后一个表达式的值.


jan*_*o-m 5

Ruby中的下划线就像任何普通变量一样,除了它有点特别之外.它确实代表"我不在乎".

例如,假设你循环遍历数组,其元素是3元素数组:

array = [[1,2,3],[4,5,6],[7,8,9],...]
Run Code Online (Sandbox Code Playgroud)

假设你只对中间价值感兴趣.有了_你可以这样做:

array.each do |_, number, _|
  # do something
end
Run Code Online (Sandbox Code Playgroud)

如果您尝试使用另一个变量执行此操作,您将获得复制变量的(预期)错误:

array.each do |v, number, v|
  # do something
end

=> SyntaxError: (eval):2: duplicated argument name
Run Code Online (Sandbox Code Playgroud)