Ruby有内置的getitem方法吗?

时间:2015-09-14 20:53:18

标签: python ruby

在Python中,有一个名为__getitem__的内置方法,您可以将其添加到类中以进行获取项目的自定义实现。例如:

class containerlist (object):

  def __init__(self, *args):
      self.container = [x for x in args]

  def __getitem__(self, i):
      return self.container[i]

在Ruby中,是否存在与__len____contains__等内置或其他Python内置函数相同的内容?

3 个答案:

答案 0 :(得分:3)

在Ruby中,您使用const [$state, api, Order] = [Symbol(), Symbol(), Symbol()]; class ConfigCtrl { static $inject = ['$state', 'api', 'Order']; constructor(...args) { [$state, api, Order].forEach((v, i) => this[v] = args[i]); // ... } addConfigurationToCart() { this[Order].saveConfiguration(); // ... } } 访问项目,该方法被调用,[]

答案 1 :(得分:3)

只是为了说明@JörgWMittag

class Containerlist
  def initialize( *args)
    @container = args
  end

  def [](i)
    @container[i]
  end
end

cl = Containerlist.new(3,4,5) #new creates a new obj and calls initialize 
p cl[1] #interpreted as cl.[](1) # => 4

关于__len__apparently,Python会将len(a_list)解释为a_list.__len__,以适应初级用户。 Ruby更喜欢size和/或length并且没有这样做 - 它只是a_list.size。所以:

class Containerlist
  def size
    @container.size
  end
end
p cl.size # => 3

答案 2 :(得分:1)

ruby​​中数组的长度(也是哈希)可以用两种方式写入(至少我知道)。为对象调用lengthcount方法。对于字符串注入,您可以使用length方法

irb(main):001:0> x = "some string"
=> "some string"
irb(main):002:0> x.class
=> String
irb(main):003:0> x.length
=> 11
irb(main):005:0> y = (1..9).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
irb(main):006:0> y.length
=> 9
irb(main):007:0> y.count
=> 9
irb(main):008:0> 
红宝石中的

__contains__等效可能是include?方法。实际上,in关键字的可能性更大。

irb(main):008:0> x.include?('s')
=> true
irb(main):009:0> y.include?('2')
=> false
irb(main):010:0> y.include?(2)
=> true
数组的

find_index和字符串的index可能会有所帮助。

irb(main):013:0> y.find_index(3)
=> 2
irb(main):016:0> x.index('s')
=> 0
irb(main):017:0> x.index('s', 4) #the second argument is offset value. 
=> 5

我不是一位经验丰富的rubyist,但希望这些对第一步有帮助。也希望,不要误导你的红宝石路径:)