什么<<运算符用ruby方法吗?

时间:2012-02-18 03:54:24

标签: ruby-on-rails ruby gem

我知道<<运算符用于appending an object to a collection以及string

<<运算符在以下代码段中的作用是什么?

 module TriangleBox
    def available_width
      height + 25
    end
  end

  Prawn::Text::Box.extensions << TriangleBox

我在Prawn gem examples页面中找到了它。

3 个答案:

答案 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上都是开源的......

希望有所帮助(祝你好运,如果你去挖掘)!