如何添加类似于rails的语法糖“添加到集合”<<运营商,即
@object.collection << item
我正在尝试
class Object
def collection<<(item)
...
end
end
但它不起作用。我可以选择在属性上定义自己的“运算符”。
注意 - 我知道使用def <<(value)
很热,但它适用于整个对象而不是其属性。
答案 0 :(得分:3)
@object.collection << item
让我们把它分开。
@object
- 好吧,有些对象。 collection
- 发送@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'
答案 1 :(得分:1)
根据Ruby的工作原理,这是不可能的。您需要使用集合方法返回一个对象,该对象具有自定义<<
方法。
答案 2 :(得分:0)
<<
是Array
的方法,因此这适用于纯Ruby:
def MyClass
def initialize
@collection = []
end
def collection
@collection
end
end
MyClass.new.collection << 'foo'