将Ruby代码转换为字符串

时间:2009-05-25 13:55:41

标签: ruby syntax-highlighting

我正在重构一些我没写过的代码,并且我发现了一条看起来像这样的行(它更长,我在这个例子中只使用了一点):

system("rubyw -e \"require 'win32ole'; @autoit=WIN32OLE.new('AutoItX3.Control');")

为了提高可读性,我将其重构为

do_something =
  "rubyw -e \"
    require 'win32ole'
    @autoit=WIN32OLE.new('AutoItX3.Control')"
system do_something

然后我想做一些更改,但由于我正在处理的代码是一个字符串,我失去了语法高亮,括号匹配和所有好东西。

是否有一种简单的方法可以在字符串之外编写一些代码,然后将其转换为字符串?

我搜索了网络和stackoverflow,但找不到答案。

有关详细信息,请查看bret/watir处的原始代码(Watir :: FileField#set,第445行),以及zeljkofilipin/watir处的分叉(第447-459行)。

3 个答案:

答案 0 :(得分:6)

您可以使用以下语法:

do_something = <<SOMETHING
  rubyw -e 
  require 'win32ole'
  @autoit=WIN32OLE.new('AutoItX3.Control')
SOMETHING

显然它是heredoc!您可以找到另一个示例here(doc)

这并不是说该命令不会因为在那里有换行而吓坏了。但是,您可以通过system do_something.split(/\r\n/).join('')或类似的方式运行它。

答案 1 :(得分:5)

好吧,您可以将代码放入外部文件并加载它。

或者,如果我没记错的话,Ruby文件可能包含DATA个部分:

# Sample ruby file:

puts DATA.readline()

__END__
foo bar

这应该打印“foo bar”。您可以将代码放在数据段中。运气好的话,您的编辑器仍然会为DATA细分提供语法高亮显示。

答案 2 :(得分:1)

Ruby2ruby听起来有点像你要问的。

http://seattlerb.rubyforge.org/ruby2ruby/