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
让你失望的是你看到了下划线的两种不同用途.
在参数列表中,它就像一个"不关心变量",就像在Prolog中一样.
在参数列表之外,它只是一个普通的标识符.在IRB中,它与先前的结果相关.由于你的上次输入是c = 3,_是3.这只是在IRB中,但是在普通的Ruby程序中不会发生这种情况.
_意思是"不关心"._没有任何意义,它是一个像其他任何标识符一样的标识符._,因此编码#1中的约定._绑定到最后一个表达式的值.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)
| 归档时间: |
|
| 查看次数: |
1001 次 |
| 最近记录: |