当前位置:  开发笔记 > 编程语言 > 正文

关于Ruby的一般问题

如何解决《关于Ruby的一般问题》经验,为你挑选了2个好方法。

我在我的rails应用程序中安装了github.com的acts_as_versioned插件,并且有一段我不完全理解的代码,我希望有人可以为我清除这个

class_eval <<-CLASS_METHODS
  def a_bunch_of_stuff
   ....
  end
CLASS_METHODS

我得到了块中的方法(或者它是什么)被定义为类中的实例方法,但我找不到CLASS_METHODS在插件中的任何地方定义为常量,而且我也不确定是什么<< - 在class_eval之后意味着.插件位于此处,相关代码从lib/acts_as_versioned.rb的第199行开始.如果有人会给我这里的低点,我会非常感激.

谢谢

-C



1> ben_h..:

这是一个heredoc.http://en.wikipedia.org/wiki/Heredoc#Ruby

匹配的CLASS_METHODS标记基本上是起始和结束引号.如果使用<< - 而不是<<,则结尾标记可以用空格缩进.

你可以在Ruby中同时使用多个heredocs(我让我的heredocs与参数名称相同,但这只是为了审美 - 它没有区别):

def define_with_description description, code
  puts "defining a method to #{description}"
  class_eval code
end

define_with_description <<-DESCRIPTION, <<-CODE
  set up us the bomb
DESCRIPTION
  Bomb.new.set_up(us)
CODE



2> Greg Hewgill..:

这是一个"here document",它是一种引用内联大型多行字符串的方法.来自编程Ruby:

字符串可以在多个输入行中继续,在这种情况下,它们将包含换行符.也可以在这里使用文档来表示长字符串文字.每当红宝石解析序列<<,将其与从连续逻辑输入线字面内置的字符串替换它.当它找到以标识符或带引号的字符串开头的行时,它会停止构建字符串.你可以在<<字符后面加一个减号,在这种情况下,终结符可以从左边距缩进.如果使用带引号的字符串来指定终止符,则其引用规则将应用于此处的文档; 否则,适用双引号规则.

这将导致class_eval将它们CLASS_METHODS作为字符串处理并在适当的上下文中执行它.名称的使用CLASS_METHODS是任意的,它可以很容易被称为其他任何东西.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有