首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 ><<运算符对拼音方法做了什么?

<<运算符对拼音方法做了什么?
EN

Stack Overflow用户
提问于 2012-02-18 11:54:24
回答 3查看 69关注 0票数 0

我知道appending an object to a collectionstring都使用<<运算符。

在下面的代码片段中,<<操作符做了什么?

代码语言:javascript
运行
复制
 module TriangleBox
    def available_width
      height + 25
    end
  end

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

我在对虾宝石的examples页面上找到的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-18 12:13:13

不要把它想成一个运算符。可以把它看作是一种方法,它有一些语法糖,使它看起来像一个操作符。

代码

代码语言:javascript
运行
复制
Prawn::Text::Box.extensions << TriangleBox

实际上是在调用

代码语言:javascript
运行
复制
Prawn::Text::Box.extensions.<<(TriangleBox)

这个方法是做什么的?简而言之,如果不阅读Prawn的文档就无法判断(尽管我们可以猜测这是通过添加一个扩展的模块来覆盖默认的available_width方法)。您可以定义<<方法来做任何您想做的事情。

代码语言:javascript
运行
复制
class Silly
  def <<(anything)
    puts "I hate chicken"
  end
end

a = Silly.new
a << 73
=> I hate chicken
票数 3
EN

Stack Overflow用户

发布于 2012-02-18 12:08:48

你自己也说过:它是“将一个对象追加到一个集合中”。在本例中,对象是模块TriangleBox,集合是Prawn::Text::Box.extensions,它看起来像是一个Array

票数 1
EN

Stack Overflow用户

发布于 2012-02-18 12:10:00

它是将一项追加到集合中。

然而,它到底是如何做到这一点的,对你来说是隐藏的。可能Prawn::Text::Box.extensions只是返回一个常规数组,在这种情况下,这是默认行为。但也可能是因为它是另一个类,而对虾团队已经编写了一个自定义的<<操作符来执行安装扩展所需的任何工作。

不幸的是,除了深入研究源代码,找出Prawn::Text::Box.extensions的类是什么,然后它是否定义了自定义的<<函数之外,没有简单的方法来判断。幸运的是,它在github上都是开源的……

希望这会有帮助(如果你去挖掘的话,祝你好运)!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9338372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档