4

フィルターを使用して:ruby、haml で簡単なことを行うと、たとえば...

:ruby
  to = comments > max_comments ? max_comments : comments
  (0...to).each do |i|
    comment = data[i]
    puts li_comment comment[0], comment[1], comment[2]
  end

このputsステートメントは、出力をコンソールに書き込みます。:rubyのドキュメントは、それが

という名前の IO オブジェクトを作成しますhaml_io。それに書き込まれたものはすべて Haml ドキュメントに出力されます。

コンソールではなく、haml_io オブジェクトを使用して、haml ドキュメントに書き込むにはどうすればよいでしょうか ( 以外のものが必要だと思いますputs)。

4

3 に答える 3

6

この動作は最近変更されました。古い動作 (バージョン 4.0 より前) では、標準出力に書き込まれたものはすべて Haml ドキュメントに書き込まれていましたが、これはスレッド セーフではありませんでした。

haml_ioドキュメントに書き込む IO オブジェクトを参照するローカル変数です。それを使用するために書き直されたコードは、次のようになります ( と がすべて以前に定義されていると仮定しcommentsますmax_comments) li_comment

:ruby
  to = comments > max_comments ? max_comments : comments
  (0...to).each do |i|
    comment = data[i]
    haml_io.puts li_comment comment[0], comment[1], comment[2]
  end

haml_ioは実際にはStringIOオブジェクトであるため、そのメソッドのいずれかを使用できます (例: haml_io.write) haml_io.putc。出力をドキュメントにリダイレクトします。

于 2013-06-26T19:52:49.530 に答える