我有这个对象:
object.name
有时名称可能是一个数组,有时它可能是一个字符串,有时也可能是一个空字符串。所以我认为我可以这样做:
object.name do |name|
name.is_a?(Array) ? name.join(' ') : name
end.presence
但是这不起作用,我可以在块中访问名称,但我做的任何事情都不会返回。
通过将名称传递到像这样的块中,我实际上在做什么?我怎么能让这个红宝石变得可爱又有效呢?
谢谢!
答案 0 :(得分:3)
执行此操作的一种简单方法是使用splat运算符:
name = [ *object.name ].join(' ')
如果object.name
只是一个字符串,那么代码基本上就是这样做:
name = [ 'some string' ].join(' ')
这将导致'some string'
。但是,如果object.name
是一个字符串数组,那么最终会得到:
name = [ 'first string', 'second string', 'third string' ].join(' ')
这将导致'first string second string third string'
。
答案 1 :(得分:1)
使用tap
和break
的组合。
object.name.tap do |name|
break name.is_a?(Array) ? name.join(' ') : name
end.presence