6

Railsソースでこのコードに出くわしました:

# File actionpack/lib/action_view/helpers/output_safety_helper.rb, line 30
def safe_join(array, sep=$,)
  sep ||= "".html_safe
  sep = ERB::Util.html_escape(sep)

  array.map { |i| ERB::Util.html_escape(i) }.join(sep).html_safe
end

何をし$,ますか?正規表現のドキュメントを読みましたが、それについて何も見つかりませんでした。

4

2 に答える 2

5

私はついにここで答えを見つけました:

印刷の出力フィールド区切り文字。また、これは Array#join のデフォルトのセパレーターです。(記憶法: print ステートメントに , がある場合に出力されるもの。)

次のコード スニペットは、効果を示しています。

a = [1,2,3]

puts a.join # => 123

$, = ','
puts a.join # => 1,2,3
于 2013-05-29T15:09:06.123 に答える
5

システム変数の公式ドキュメントは次の場所にあります。

http://www.ruby-doc.org/stdlib-2.0/libdoc/English/rdoc/English.html

Ruby の特殊変数の多くは、さまざまなモジュールやクラスのメソッドを介してアクセスできます。これにより、変数に値が含まれているという事実が隠されます。たとえばlineno、IO で使用でき、File によって継承される は、IO ストリームによって読み取られた最後の行の行番号です。それは依存し$/ている$.

「英語」モジュールは、暗号変数の長いバージョンを提供し、読みやすくしています。不可解な変数の使用は、Ruby では Perl ほど慣用的ではありません。

それらはさまざまなソースから来ています。すべてではないにしても、ほとんどは Perl から直接来ていますが、Perl はそれらを sed、awk、および残りのキッチン シンク コード コレクションから継承しています。(本当に素晴らしい言語です。)

照合前後の変数とキャプチャを定義するRegexpなどのクラスによって設定される他の変数があります。これはドキュメントからのものです:

$~ is equivalent to ::last_match;
$& contains the complete matched text;
$` contains string before match;
$' contains string after match;
$1, $2 and so on contain text matching first, second, etc capture group;
$+ contains last capture group.

Ruby は変数の短い不可解なバージョンを定義しますがrequire "English"、長い名前を提供するために使用することをお勧めします。これは読みやすさであり、長期的なメンテナンスのしやすさにつながります。

于 2013-05-29T15:44:14.780 に答える