有时我需要这样的方法,它可以改变自己对象的类。有String#delete!
、#downcase!
、#encode!
、#gsub!
、#strip!
、#slice!
、String
等。它们都在尝试更改字符串,但结果类仍然是String
。我想要一个方法,可以把Array
转换成。
有办法做到这一点:
irb(main):082:0> str = "qwerty"
=> "qwerty"
irb(main):083:0> str.split! "e"
=> ["qw", "rty"]
irb(main):084:0> str
=> ["qw", "rty"]
有可能吗?也许一些酷日本功夫或丑陋的自行车-我想看看任何解决办法。
最佳答案
不,不可能。对象不能在ruby中更改它们的类。
例如,在smalltalk中,可以使用become:
:
becomeSubStrings: aString
self become: (self subStrings: aString).
如果你这样称呼它:
s := 'qwerty'.
s becomeSubStrings: 'e'.
现在,
s
是一个数组:Transcript show: s printString.
结果是:
#('qw' 'rty')
技术上,
become:
不会改变对象的类,而是让一个对象变成另一个对象。在这种情况下,我们让self
成为self subStrings:
的结果,它将字符串分割成一个子字符串数组。结果是一样的:原来的字符串接收器现在是一个数组。