首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于if else的三元运算符

基于if else的三元运算符
EN

Stack Overflow用户
提问于 2017-06-21 00:12:49
回答 4查看 461关注 0票数 4

如果我有下面的If else语句

代码语言:javascript
运行
复制
if a.present? && b.value == 'N'
 b = test
elsif a.present? && b.value == 'Y'
 b = guest
end

我可以为此编写三元运算

代码语言:javascript
运行
复制
b = (a.present? && b.value == 'N') ? "test" : "guest"

但在这个三元运算符中,我不是在寻找== 'Y‘的条件,它可以是其他的'd’或'e‘。

如何更新三进制运算符,以便验证if和elsif中的两个条件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-21 00:29:40

对于这样的事情,您可能想要使用一个简单的查找表来消除一些逻辑:

代码语言:javascript
运行
复制
EQUIVALENT = {
  'Y' => 'guest',
  'N' => 'test'
}

if (a.present?)
  b = EQUIVALENT[b.value] || b
end

如果忽略非映射的b值,则|| b部分可能不是必需的。

票数 4
EN

Stack Overflow用户

发布于 2017-06-21 00:21:27

代码语言:javascript
运行
复制
b = case b.value
    when 'N' then test
    when 'Y' then guest
    end if a.present?

到目前为止,这是唯一的答案。

票数 4
EN

Stack Overflow用户

发布于 2017-06-21 05:27:31

您可以使用三元运算符。然而,这并不意味着你应该这样做:

代码语言:javascript
运行
复制
a.present? && (b.value == 'N' ? b = 'test' : b.value == 'Y' && b = 'guest')

下面是一个小测试:

代码语言:javascript
运行
复制
class Object
  def present?
    true
  end
end

class NilClass
  def present?
    false
  end
end

a = true

class B
  attr_accessor :value
end

b = B.new
b.value = 'Y'

a.present? && (b.value == 'N' ? b = 'test' : b.value == 'Y' && b = 'guest')

p b
# "guest"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44658133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档