在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内置函数相同的内容?
答案 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中数组的长度(也是哈希)可以用两种方式写入(至少我知道)。为对象调用length
或count
方法。对于字符串注入,您可以使用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,但希望这些对第一步有帮助。也希望,不要误导你的红宝石路径:)