3

我刚刚开始学习 Ruby 中的元编程,发现自己想知道是否可以(以某种方式)查看已生成的代码。作为编码练习,我想编写一个简短的方法,该方法将生成一个 Ruby 文件,其中包含一些方法定义,或者理想情况下,包含整个类或模块定义。

我在想也许只是建立文件的字符串表示然后仅仅将其写出来可能是一种实现方式,但这种方式并不需要使用元编程,因为我的目标是元编程练习,我想找出一种方法将其合并到该过程中,或者以另一种方式进行。

我想,如果我要采用构建字符串的方法,我想从类似的东西开始

klass_string = "class GeneratedClass\n\t<BODY>\nend"

然后以某种方式保存这样的输出

define_method( :initialize ) do
  instance_variable_set("@var", "some_value")
end

在可以替换 '' inklass_string然后写出到文件中的字符串中。我知道我可以将上面的代码片段直接放入字符串中,它会很好地锻炼,但我希望输出采用更标准的格式,就好像它是手工编写的而不是生成的一样:

class GeneratedClass
  def initialize
    @var = 'some_value'
  end
end

有人能指出我正确的方向吗?

4

1 回答 1

2

我同意您的评论,即这个问题实际上与元编程无关,而是与动态代码生成/执行和自省有关。这些都是有趣的话题,但不是真正的元编程。特别是您关于将 ruby​​ 代码输出到字符串的问题是关于自省的,而您的字符串注入问题是关于动态代码的(只是为了尝试向谷歌提供有关您感兴趣的内容的信息)。

由于您的问题是一般性的,并且实际上是关于内省和动态代码的,因此我将向您推荐一些可以帮助您了解更多信息的规范且有用的项目。

ParseTree & Ruby 解析器Sourcify

Ruby Parser 是 ParseTree 的纯 ruby​​ 实现,所以我建议从那里开始学习如何检查和“字符串化”Ruby 代码。玩转所有这些,特别是了解他们如何检查 Ruby 中的代码以生成结果。你会学到很多关于事情是如何在幕后工作的。埃里克·霍德尔(Eric Hodel)等人在这方面非常聪明。但请注意,这确实是高级的东西,但如果您想在那里建立专业知识,希望这些参考资料会有所帮助!

于 2013-07-04T04:15:54.980 回答