1

我正在使用 Ruby on Rails 3.2.2,我想改进下面的代码,也许使用一些 Ruby on Rails 方法。

["one", "two", "three"]我有一个我要制作的数组

# From `Symbol`s to `String`s
array = [:one, :two, :three].map {|k| k.to_s}
# => ["one", "two", "three"]

然后(attr_accessible下面使用的方法只是一个示例方法,仅用于说明我的工作;在生产中,我在自定义方法中使用“splat”数组)

attr_accessible *array
# => attr_accessible "one", "two", "three"

有没有更好的方法来制作上述内容?如果是这样,我怎样才能["one", "two", "three"]以“优雅”的方式“转换”数组?

4

2 回答 2

1

在普通的 Ruby 中,你可以做

array = [:one, :two, :three].map(&:to_s)

使用 map_by_method gem,您可以:

array = [:one, :two, :three].map_by_to_s

如果您像这样实现自定义方法:

def foo(*args)
  converted_args = args.flatten.map(&:to_s)
end

你可以这样称呼它

 foo "one", "two", "three"
 foo :one, :two, :three

 args = [:one, :two, :three]
 foo *args
 foo args # see flatten above
于 2012-05-11T22:45:48.623 回答
0

你的问题我不清楚。我不知道您是要将字符串数组转换为符号数组,还是要将符号数组转换为字符串数组?或者,也许您正在寻找比使用 splat 更好的解决方案。任何状况之下 ...

要将字符串转换为符号,请使用 to_sym。

["one", "two", "three"].map(&:to_sym)

要将符号转换为字符串,请使用 to_s (如@Mr.Ronald 的回答所示)

[:one, :two, :three].map(&:to_s)
于 2012-05-12T05:04:39.027 回答