与Ruby相关的反义词是什么? <<

时间:2014-01-10 04:56:27

标签: ruby

如果a = 'foo'我可以a << 'bar'并返回foobar但是我想删除bar

我知道我可以做a.slice!(3..a.length) - 但该死的是那个丑陋的。

让我们regex这个愚蠢的混蛋像a.gsub!('bar','') - 但这个是最好的方法吗?


为什么我不能这样做?: a >> 'bar' - 这将是超级的!


那你们怎么做呢?什么是最快的方法?

3 个答案:

答案 0 :(得分:4)

  

为什么我不能这样做?:a&gt;&gt; 'bar' - 这将是超级棒!

因为使用[]会更清楚。

a = 'foobar'
a['bar'] = ''
a # 'foo'

如果您最后只需匹配bar,请使用正则表达式:

a = 'barfoobar'
a[/bar$/] = ''
a # 'barfoo'

a >> 'bar'不会是'超级',这将是完全模棱两可的。 a >> b是什么意思?您是在弹出一个字符并将其存储在b中,还是将b的值移到a的末尾,或者将两边转换为整数和位移? <<表示移动,右侧的字符向左移动。 >>会向我建议字符从左向右移动,而不是我想要删除并丢弃左边的字符。

a << 'foo'的唯一原因是因为追加字符串是您在软件中最常见的事情之一。

答案 1 :(得分:0)

“追加”或“推”的反面通常称为“流行”。这些名称来自堆栈(数据结构)术语,可用于数组:

ary = ?f, ?o, ?o
suffix = ?b, ?a, ?r
suffix.each &ary.method( :push )
ary #=> ["f", "o", "o", "b", "a", "r"]
ary.pop 3 #=> ["b", "a", "r"]

要使用push和pop with strings,你必须首先对它们进行排序:

str = 'foobar'
# arrayification
ary = str.each_char.to_a
ary.pop( 3 ).join #=> "bar"
str = ary.join #=> foo

答案 2 :(得分:0)

在这种情况下这不起作用,并且不比gsub干净得多吗?:

a = 'foobar'
a.delete!('bar')
=> "foo"

a = 'foobarfoobarfoobarfoobar'
a.delete!('bar')
=> "foofoofoofoo"