2009-05-25 61 views
4

我重構了一些代碼,我沒有寫,我發現一條線,看起來像這樣(這是我用更長的時間只是這個例子有點):轉換Ruby代碼串

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

爲了增加可讀性,我把它重構爲

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

然後我想做出一些改變,但因爲我工作的代碼是一個字符串,我輸了語法高亮顯示,括號匹配和所有的好東西。

是否有一種簡單的方法在字符串之外編寫一些代碼然後將其轉換爲字符串?

我已經搜索了網站和計算器,但找不到答案。

欲瞭解更多信息,請看bret/watir(Watir :: FileField#set,第445行)的原始代碼,以及我的分支zeljkofilipin/watir(447-459行)。

回答

6

您可以使用下面的語法:

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

顯然,這是一個heredoc!你可以找到另一個例子here(doc)

這並不是說命令不會因爲在那裏換行而發愁。但是,你可能會運行它system do_something.split(/\r\n/).join('')或類似的東西。

5

那麼,你可以把代碼放到一個外部文件中並加載它。

或者,如果我沒有記錯,Ruby文件可能包含DATA部分:

# Sample ruby file: 

puts DATA.readline() 

__END__ 
foo bar 

這應打印 「foo bar」。你可以把你的代碼放在數據段中。運氣好的話,您的編輯器仍然會爲DATA分段提供語法高亮顯示。

+0

難道只是我,或者是你的例子有問題嗎? > puts DATA NameError:未初始化的常量DATA from(irb):1 – 2009-05-25 14:10:36

+0

它適用於我...沒有錯誤。我已經更新了源代碼,以創建正確的輸出。 – 2009-05-25 14:42:40