ruby方法链接

时间:2010-10-31 01:16:56

标签: ruby

   var.split('/').delete_at(0)

检查后返回

"" 

无论字符串是什么......

   var.split('/')
   var.delete_at(0)

给我带来麻烦。这可能是一个愚蠢的问题,但对于像这样的方法链接是否存在某种限制/限制?

感谢, 布兰登

3 个答案:

答案 0 :(得分:8)

delete_at方法删除元素,但返回已删除的元素而不是新数组。

如果要始终返回对象,可以使用tap方法(自Ruby 1.8.7起可用)。

a = [1, 2, 3, 4, 5, 6, 7]
a.delete_at(0) # => 1
a # => [2, 3, 4, 5, 6, 7]

a = [1, 2, 3, 4, 5, 6, 7]
a.tap { |a| a.delete_at(0) } # => returns [2, 3, 4, 5, 6, 7]
a # => [2, 3, 4, 5, 6, 7]

答案 1 :(得分:2)

  

从字面上看,我试图做的第一件事就是:

     

var.split( '/')。delete_at(0)

     

在检查时返回

     

“”

     

无论字符串是什么

你确定吗?尝试字符串'a/b'

irb(main):001:0> var = 'a/b'
=> "a/b"
irb(main):003:0> var.split('/').delete_at(0)
=> "a"

请注意,返回值是已删除的元素,而不是数组。您通过执行拆分创建的数组未存储在任何位置,现在您没有引用它。你可能想要这样做:

a = var.split('/')
a.delete_at(0)

答案 2 :(得分:0)

如果您总是需要删除第一个元素,则可以使用其他返回对象本身的方法,例如slice!,例如:

s = 'foo/bar/baz'
#=> "foo/bar/baz"
s.split('/').slice!(1..-1)
#=> ["bar", "baz"]