如何在Ruby中使用条件分配

时间:2018-07-12 21:20:03

标签: ruby

除非索引为零,否则我想将a的值设置为等于找到的索引,在这种情况下,我要将其设置为减去该值的某个数字。我想知道是否可以在Ruby中执行此操作(取自python):

a='/-123456789X'.find(y)or 99-x

有人知道这样做的好方法吗?

2 个答案:

答案 0 :(得分:2)

尝试这个。给定xy

a = "/-123456789X".index(y) || 99 - x

答案 1 :(得分:1)

中,string.find(other)将返回index中的other-1,如果otherstring中不存在。

中,string.index(other)将返回index中的othernil,如果otherstring中不存在。

“ Truthy”和“ Falsey”值:

  • ruby承认nil为“假”和0为“真实”;但是
  • python承认0为“假”,-1为“真”

因此您当前的python代码具有3个可能的返回值:

  • -1(不存在的子字符串)
  • 99-x(以'/'开头的现有子字符串)
  • n(不以'/'开头的现有子字符串的索引)

为了在ruby中获得等效结果,您的代码应如下所示:

str = '/-123456789X'
a = if y.start_with?('/') && str.index(y)
  99 - x
else
  str.index(y) || -1
end

其他替代方法包括:

# Ruby >= 2.5 using `String#match? 
str.match?(/\A#{y}/) ? 99 - x : str.index(y) || -1

也就是说,您的实际请求“除非该索引为零,否则我想将a的值设置为等于找到的索引,在这种情况下,我要将其设置为某个数字减去该值“ 似乎有点不同,我不确定这是否意味着x是“那个值”以及在这种情况下x应该代表什么。

  • x应该是开始索引吗?
  • x应该是结束索引吗?