我想测试是a等于1 还是 2
我可以
a == 1 || a == 2
Run Code Online (Sandbox Code Playgroud)
但这需要重复a(这对于较长的变量会很烦)
我想做类似的事情a == (1 || 2),但显然这不会奏效
我能做到[1, 2].include?(a),这并不坏,但让我觉得有点难以阅读
只是想知道如何使用惯用的红宝石
Pet*_*ter 38
你的第一种方法是惯用的Ruby.不幸的是,Ruby没有相当于Python的东西a in [1,2],我觉得它会更好.你[1,2].include? a是最近的选择,我认为从最自然的方式来看,它有点落后.
当然,如果你经常使用它,你可以这样做:
class Object
def member_of? container
container.include? self
end
end
Run Code Online (Sandbox Code Playgroud)
然后你就可以做到a.member_of? [1, 2].
Jac*_*Chu 11
我不知道你在什么情况下使用它,但如果它适合switch语句,你可以这样做:
a = 1
case a
when 1, 2
puts a
end
Run Code Online (Sandbox Code Playgroud)
其他一些好处是,当使用case equality ===运算符时,如果需要,可以为不同的行为覆盖该方法.另一个是,如果符合您的使用案例,您也可以使用它的范围:
when 1..5, 7, 10
Run Code Online (Sandbox Code Playgroud)
一种方法是请求"Matz"将此功能添加到Ruby规范中.
if input == ("quit","exit","close","cancel") then
#quit the program
end
Run Code Online (Sandbox Code Playgroud)
但case-when语句已经让你做到了这一点:
case input when "quit","exit","close","cancel" then
#quit the program
end
Run Code Online (Sandbox Code Playgroud)
当写在这样的一行上时,它起作用,几乎看起来像if语句.最底层的例子是顶级例子的一个很好的临时替代吗?你是法官.
首先把它放在某个地方:
class Either < Array
def ==(other)
self.include? other
end
end
def either(*these)
Either[*these]
end
Run Code Online (Sandbox Code Playgroud)
然后,然后:
if (either 1, 2) == a
puts "(i'm just having fun)"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24845 次 |
| 最近记录: |