ruby:为字符串创建块

时间:2014-02-09 14:26:02

标签: ruby-on-rails ruby ruby-on-rails-3

我有这个对象:

object.name

有时名称可能是一个数组,有时它可能是一个字符串,有时也可能是一个空字符串。所以我认为我可以这样做:

object.name do |name|
  name.is_a?(Array) ? name.join(' ') : name
end.presence

但是这不起作用,我可以在块中访问名称,但我做的任何事情都不会返回。

通过将名称传递到像这样的块中,我实际上在做什么?我怎么能让这个红宝石变得可爱又有效呢?

谢谢!

2 个答案:

答案 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)

使用tapbreak的组合。

object.name.tap do |name|
  break name.is_a?(Array) ? name.join(' ') : name
end.presence