Ruby on rails 如何向类似于集合的rails添加语法糖

Ruby on rails 如何向类似于集合的rails添加语法糖,ruby-on-rails,ruby,syntax,syntactic-sugar,Ruby On Rails,Ruby,Syntax,Syntactic Sugar,如何添加类似于rails“addtocollection”的语法糖基于Ruby的工作原理,这是不可能的。您将需要您的收集方法来返回一个具有自定义的对象,这是不可能的,因为Ruby是如何工作的。您需要使用collection方法返回具有自定义 顺便说一下,这些表单做同样的事情,产生同样的输出 b.collection << 'item' b.send(:collection).send(:<<, 'item') b.collection.<<('item') b

如何添加类似于rails“addtocollection”的语法糖基于Ruby的工作原理,这是不可能的。您将需要您的收集方法来返回一个具有自定义
的对象,这是不可能的,因为Ruby是如何工作的。您需要使用collection方法返回具有自定义

顺便说一下,这些表单做同样的事情,产生同样的输出

b.collection << 'item'
b.send(:collection).send(:<<, 'item')
b.collection.<<('item')
b.collection.<< 'item'
b.collection
顺便说一下,这些表单做同样的事情,产生同样的输出

b.collection << 'item'
b.send(:collection).send(:<<, 'item')
b.collection.<<('item')
b.collection.<< 'item'

b.collection我不想只添加到集合中-我如何添加特殊行为,如检查重复项等?我不想只添加到集合中-我如何添加特殊行为,如检查重复项等?尽管我喜欢您的解决方案,但很遗憾,def@object.collection=(value)是可能的-分配是特权运算符:-)这是有原因的。Getter/setter是一个常见的习语。Half-method-Half操作符不是:)但是add操作符在rails中非常常见,我希望它更容易调整。但是我明白原因了。虽然我喜欢你的解决方案,但还是很遗憾,def@object.collection=(value)是可能的-赋值是特权运算符:-),这是有原因的。Getter/setter是一个常见的习语。Half-method-Half操作符不是:)但是add操作符在rails中非常常见,我希望它更容易调整。但我明白原因了。我说的差不多,我只是没有用“代理”这个词;)相反,我说的是“一个拥有你的自定义
的对象,这和我说的差不多,我只是没有使用“proxy”这个词;)而我说的是“一个拥有你的自定义
的对象”
def MyClass
  def initialize
    @collection = []
  end
  def collection
    @collection
  end
end

MyClass.new.collection << 'foo'
@object.collection << item
class Foo
  def << val
    puts "someone pushed #{val} to me"
  end
end

class Bar
  def collection
    @foo ||= Foo.new
  end
end

b = Bar.new

b.collection << 'item'
# someone pushed item to me
b.collection << 'item'
b.send(:collection).send(:<<, 'item')
b.collection.<<('item')
b.collection.<< 'item'