Ruby如何在一行代码中完成赋值、nil检查并返回结果?
当然可以!Ruby的语法灵活性刚好能帮你实现这个需求
你完全可以把赋值、nil检查和返回逻辑浓缩到更简洁的代码里,甚至一行就能搞定。这里有几种优雅的实现方式:
方式一:简洁且可读性强的版本
def create_button(content) Button.new(title, url) if (title = content.dig(0, 'text')) && (url = content.dig(0, 'url')) end
这个写法的逻辑和你原函数完全一致:
- 我们在
if的条件里完成title和url的赋值 - 利用Ruby的短路求值特性:如果
title赋值后是nil,后面的url赋值会直接跳过,整个条件为false,方法自动返回nil - 只有当
title和url都不为nil时,才会创建并返回Button实例
方式二:极致紧凑的一行版本
如果追求把方法体压缩成一行(虽然可读性会稍弱),可以这么写:
def create_button(content); Button.new(title, url) if (title = content.dig(0, 'text')) && (url = content.dig(0, 'url')); end
补充说明
如果你更习惯用三元表达式,也可以写成这样:
def create_button(content) (title = content.dig(0, 'text')) && (url = content.dig(0, 'url')) ? Button.new(title, url) : nil end
效果和上面的版本完全一样,只是写法风格不同。
内容的提问来源于stack exchange,提问作者Fogmeister
相关产品推荐
相关产品推荐

