我想使用%w函数将字符串转换为数组,但字符串来自对象
所以我想实现这样的东西:
%w(@object.string)
or
%w(#{@object.string})
两者都不奏效。
这可能吗?
答案 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"]