gpt4 book ai didi

ruby-on-rails - 数组实例变量上类似 Active Record 的功能

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:09 25 4
gpt4 key购买 nike

我想编写一个模块,在数组实例变量上提供类似事件记录的功能。

它的使用示例是

x = Container.new
x.include(ContainerModule)
x.elements << Element.new
x.elements.find id

module ContainerModule
def initialize(*args)
@elements = []
class << @elements
def <<(element)
#do something with the Container...
super(element)
end

def find(id)
#find an element using the Container's id
self
#=> #<Array..> but I need #<Container..>
end
end
super(*args)
end
end

问题是我需要这些方法中的 Container 对象。对 self 的任何引用都将返回数组,而不是容器对象。

有什么办法吗?

谢谢!

最佳答案

这样的事情对你有用吗?

class Container
attr_accessor :elements

def initialize
@elements = ContainerElements.new
end
end

class ContainerElements < Array

def find_by_id(id)
self.find {|g| g.id == id }
end

end

因此,我创建了一个容器类和一个继承自 Array 的 ContainerElements,并添加了(特定的)find_by_id 方法。如果你真的想调用它 find 你需要 alias 它。

示例代码为:

class ElemWithId
attr_accessor :id
def initialize(value)
@id = value
end
end

cc = Container.new
cc.elements << ElemWithId.new(1)
cc.elements << ElemWithId.new(5)

puts "elements = #{cc.elements} "
puts "Finding: #{cc.elements.find_by_id(5)} "

希望这有助于...

关于ruby-on-rails - 数组实例变量上类似 Active Record 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2804620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com