我通过工作我的方式项目欧拉,跑进一个稍微令人惊讶的疏漏:没有String#shift,unshift,push,或pop.我假设String被认为是一个像"数组"一样的"顺序"对象,因为它们具有索引和迭代的能力,并且这包括轻松更改对象的开头和结尾的能力.
我知道有很多方法可以创造同样的效果,但有一个特殊的原因,串并不会有这些方法?
不是Ruby的贡献者,我不能说他们的设计目标,但从经验来看,我不认为字符串被视为"顺序"对象; 它们在表示顺序行为的方式上是可变的,但大多数时候它们都是原子地处理的.
例证:在Ruby 1.9中,String不再混入Enumerable.
>> mystring = "abcdefgh"
=> "abcdefgh"
>> myarray = mystring.split("")
=> ["a", "b", "c", "d", "e", "f", "g", "h"]
>> myarray.pop
=> "h"
>> mystring = myarray.join
=> "abcdefg"
Run Code Online (Sandbox Code Playgroud)
这应该这样做,你可能会将它转换为数组,然后回来
更新:
使用String#chop!和Stirng#<<
>> s = "abc"
=> "abc"
>> s.chop!
=> "ab"
>> s
=> "ab"
>> s<<"def"
=> "abdef"
>> s
=> "abdef"
>>
Run Code Online (Sandbox Code Playgroud)