我有一个定义为...的函数
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
或某事......
无论如何,我想知道是否有可能将前几行放在一起并完成作业,无需检查并返回一行?
答案 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?
。您可以将此用于其他可枚举方法,例如each
,select
,reject
或detect
。
这是你的方法的一个很好的简短形式,做了所有相同的事情:
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。