4

我正在重构一些我没有写的代码,我发现了这样一行(它更长,我在这个例子中只用了一点点):

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的 fork (第 447-459 行)。

4

3 回答 3

6

您可以使用以下语法:

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

显然这是一个heredoc!您可以在此处找到另一个示例(文档)

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

于 2009-05-25T14:47:13.440 回答
5

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

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

# Sample ruby file:

puts DATA.readline()

__END__
foo bar

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

于 2009-05-25T13:59:43.770 回答
1

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

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

于 2009-05-25T18:50:38.087 回答