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

次に、いくつかの変更を加えたかったのですが、作業中のコードが文字列内にあるため、構文の強調表示、括弧の一致、およびすべての優れた機能が失われます。

文字列の外側にコードを書き、それを文字列に変換する簡単な方法はありますか?

ウェブとスタックオーバーフローを検索しましたが、答えが見つかりませんでした。

詳細については、bret/watirの元のコード(Watir::FileField#set、445 行目) と、zeljkofilipin/watirの私のフォーク(447 ~ 459 行目) を参照してください。

4

3 に答える 3

6

次の構文を使用できます。

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

どうやらそれはヒアドキュメントです!ここ(doc) で別の例を見つけることができます。

これは、コマンドがそこに改行が入っていてもおかしくないということではありません。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 に答える