Ruby:在一行中指定并检查是否为nil

Ruby:在一行中指定并检查是否为nil,ruby,Ruby,我有一个定义如下的函数 def create_button(content) title = content.dig(0, 'text') url = content.dig(0, 'url') return nil if title.nil? || url.nil? return Button.new( title, url ) end 或者别的什么 不管怎样,我想知道是否有可能把前几行放在一起,然后做作业,不检查,然后一行返回?类似的事情吗 def

我有一个定义如下的函数

def create_button(content)
  title = content.dig(0, 'text')
  url = content.dig(0, 'url')

  return nil if title.nil? || url.nil?

  return Button.new(
    title,
    url
  )
end
或者别的什么

不管怎样,我想知道是否有可能把前几行放在一起,然后做作业,不检查,然后一行返回?

类似的事情吗

def create_button(content)
  title, url = content[0]&.values_at('text', 'url')
  return nil if title.nil? || url.nil?

  Button.new(title, url)
end

可以按如下方式分配多个值:

a, b = 'a', 'b'
当您有一个结果时,比如
return nil
,您的if中可能有两个条件

return nil if a.nil? or b.nil?
或者使用
any?

return nil if [a, b].any?(&:nil?)
因此,这里的&符号是创建lambda或可重用代码块的快捷方式。它将尝试对数组中的每个项运行方法
nil?
。您可以将其用于其他可枚举方法,例如
每个
选择
拒绝
检测

下面是您的方法的一个很好的简短形式,可以做所有相同的事情:

def create_button(content)
  title, url = content.dig(0, 'text'), content.dig(0, 'url')
  return nil if [title,url].any(&:nil?)
  return Button.new(title, url)
end
你能做的就是

def create_button(content)
  title = content.dig(0, 'text')
  url = content.dig(0, 'url')

  return nil if title.nil? || url.nil?

  return Button.new(
    title,
    url
  )
end

因为标题或url为nil,所以返回nil。

如果
content
数组不包含任何值,则
content[0]
将出现错误?正常!谢谢,我不知道
values\u at
:)我的荣幸,先生:)警卫条款可能会缩短为
return,除非标题和url
是的,你是对的。但我倾向于避免,除非当我有一个复合条件谢谢,我更新了我的问题,把这些放在一起,因为我意识到我没有这样做。也许只是我,但你的代码与问题中的代码有何不同?@spickermann我想他们一定是在我编辑之前回应了我的代码。