3

来自 Ruby_Newbie 符号指南:

作者试图展示 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
4

2 回答 2

12

这是一个heredoc。来自“ Here Documents ”文档:

如果您正在编写一大段文本,您可以使用“here document”或“heredoc”:

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

That might span many lines
HEREDOC

heredoc 从<<HEREDOC下一行开始,到以 . 开头的下一行结束HEREDOC。结果包括结束换行符。

于 2013-10-16T21:18:55.860 回答
2

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

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

PS 不建议使用 eval,替代方案 - yield、instance_eval、class_eval。

于 2013-10-16T21:17:30.193 回答