【问题标题】:What is <<- in ruby?红宝石中的 <<- 是什么?
【发布时间】:2013-10-17 05:33:02
【问题描述】:

From the Ruby_Newbie Guide to Symbols:

作者试图展示 attr_writer 方法的简化实现。

#!/usr/bin/env ruby

def make_me_a_setter(thename)
    eval <<-SETTERDONE         # <----- Here
    def #{thename}(myarg)
        @#{thename} = myarg
    end
    SETTERDONE
end

class Example
    make_me_a_setter :symboll
    make_me_a_setter \"stringg\"

    def show_symboll
        puts @symboll
    end

    def show_stringg
        puts @stringg
    end
end

example = Example.new
example.symboll(\"ITS A SYMBOL\")
example.stringg(\"ITS A STRING\")
example.show_symboll
example.show_stringg

标签: ruby syntax


【解决方案1】:

它是异端.来自“Here Documents”文档:

如果您正在编写大量文本,您可以使用“此处文档” 或“heredoc”:

expected_result = <<HEREDOC
This would contain specially formatted text.

That might span many lines
HEREDOC

heredoc 从&lt;&lt;HEREDOC 之后的行开始,以 以HEREDOC 开头的下一行。结果包括结尾 新队。

【讨论】:

  • &lt;&lt; 和分隔符标记之间的破折号意味着忽略与结束标记相同的行上的空格。
  • 它允许您缩进关闭修饰符。
【解决方案2】:

这是一个多行字符串。该代码评估嵌入在字符串中的代码。更多关于多行字符串:

http://blog.jayfields.com/2006/12/ruby-multiline-strings-here-doc-or.html

附言不推荐使用 eval,替代方案 - yield、instance_eval、class_eval。

【讨论】:

  • SETTERDONE 可以是任何字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 2017-08-11
  • 2011-04-26
  • 1970-01-01
  • 2010-10-06
  • 2015-07-28
相关资源
最近更新 更多