我知道<<
运算符用于appending an object to a collection
以及string
。
<<
运算符在以下代码段中的作用是什么?
module TriangleBox
def available_width
height + 25
end
end
Prawn::Text::Box.extensions << TriangleBox
我在Prawn gem examples页面中找到了它。
答案 0 :(得分:3)
不要将其视为运营商。可以把它想象成一种具有一些语法糖的方法,使它看起来像一个操作符。
代码
Prawn::Text::Box.extensions << TriangleBox
实际上正在调用
Prawn::Text::Box.extensions.<<(TriangleBox)
这种方法在做什么?简而言之,没有阅读Prawn的文档就没有办法告诉我们(虽然我们可以通过添加扩展的模块来猜测这会覆盖默认的available_width方法)。您可以定义&lt;&lt;做任何你想要的方法。
class Silly
def <<(anything)
puts "I hate chicken"
end
end
a = Silly.new
a << 73
=> I hate chicken
答案 1 :(得分:1)
你自己说:它是“将一个对象附加到一个集合”。在这种情况下,对象是模块TriangleBox
,集合是Prawn::Text::Box.extensions
,似乎是Array
。
答案 2 :(得分:1)
它正在将一个项目附加到集合中。
但是,它究竟是怎么做的,对你来说是隐藏的。可能是Prawn::Text::Box.extensions
只返回一个常规数组,在这种情况下它是默认行为。但它也可能是其他类,并且Prawn人员编写了一个自定义<<
运算符来完成安装扩展所需的任何工作。
不幸的是,没有简单的方法可以说明挖掘源代码,弄清楚Prawn::Text::Box.extensions
的类是什么,然后确定是否定义了自定义<<
函数。幸运的是,它在github上都是开源的......
希望有所帮助(祝你好运,如果你去挖掘)!