将%w与对象中的字符串一起使用

时间:2014-05-29 10:43:45

标签: ruby arrays

我想使用%w函数将字符串转换为数组,但字符串来自对象

所以我想实现这样的东西:

%w(@object.string)
or
%w(#{@object.string})

两者都不奏效。

这可能吗?

4 个答案:

答案 0 :(得分:1)

您可以使用[@object.string]Array[@object.string]

危险解决方案

还有eval的选项(但是每个人都知道eval是邪恶的)。 eval("%w(#{@object.string}")。 我仍然认为你应该只使用Array,Enumerable和String方法而不是这个。

不要为此投票,问题是“这可能吗?”

答案 1 :(得分:1)

使用#split方法... %W/%w用于一组由空格分隔的字符串,您可以将它们转换为的阵列即可。如果您有%w( foo bar )但不是%w( "foo bar" )%w( "foo bar" )会给你["foo bar" ]。但我相信你想要["foo", "bar" ]

答案 2 :(得分:0)

除了使用split之外,您可以通过实现to_s方法并使用%W来实现,但您也可以立即实现to_a方法。

class Myobject
  attr_reader :my_attr1, :my_attr2

  def initialize(my_attr1, my_attr2)
    @my_attr1 = my_attr1
    @my_attr2 = my_attr2
  end

  def to_s
    "#{my_attr1} #{my_attr2}"
  end

  def to_a
    # [my_attr1, my_attr2]
    self.split
  end

end

myobject = Myobject.new('string1', 'string2')
p myobject.to_a # ["string1", "string2"]
p myobject.to_s #"string1 string2"
p %W(#{myobject.to_s}) #["string1 string2"]

答案 3 :(得分:0)

%w()无法做到这一点,但可以使用%W():

  x = "abc"  # => "abc"
  %w( x )    # => ["x"]
  %w( #{x} ) # => ["\#{x}"]
  %W( #{x} ) # => ["abc"]