Ruby:分配并检查一行中是否为nil

时间:2018-03-21 11:00:18

标签: 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

或某事......

无论如何,我想知道是否有可能将前几行放在一起并完成作业,无需检查并返回一行?

3 个答案:

答案 0 :(得分:3)

有这样的吗?

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

  Button.new(title, url)
end

答案 1 :(得分:1)

您可以多次分配如下值:

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?。您可以将此用于其他可枚举方法,例如eachselectrejectdetect

这是你的方法的一个很好的简短形式,做了所有相同的事情:

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

答案 2 :(得分:0)

你能做的是

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

因为标题或网址都是零,你将返回nil。