Ruby有内置的getitem方法吗?

2024-09-29 23:33:10 发布

您现在位置:Python中文网/ 问答频道 /正文

在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中,对于这个或其他Python内建,是否有一个等价的__len__或{}?在


Tags: 方法inselfforreturnobjectinitcontainer
3条回答

在Ruby中,使用[]访问项,方法被称为[]。在

只是为了说明@Jörg W Mittag

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和/或{},而不是这样做——它只是a_list.size。所以:

^{pr2}$

在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> 

ruby中的__contains__等价于include?方法。实际上,它更有可能是in关键字。在

^{pr2}$

数组的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

我不是一个经验丰富的鲁比主义者,但希望这些将有助于第一步。也希望不要在你的ruby路径上误导你:)

相关问题 更多 >

    热门问题