2

には例があります:

"Seconds/day: #{24*60*60}" # => Seconds/day: 86400
"#{'Ho! '*3}Merry Christmas!" # => Ho! Ho! Ho! Merry Christmas!
"This is line #$." # => This is line 3

しかし、3行目の記号#$を別のファイルに実装しようとすると、奇妙なsmthが出力されます。これが私のファイルですstr2.rb

puts "Hello, World #$."
puts "Hello, World #$"
puts "#$"

今私はそれを実行します(Win XPコンソールで):

C:\ ruby​​ \ sbox> ruby​​ str2.rb
Hello、World 0
Hello、World ["enumerator.so"、 "C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/i386-mingw32/enc/encdb.so"、 "C:/Rai
lsInstaller / Ruby1.9.3 / lib / ruby​​ / 1.9.1 / i386-mingw32 / enc / windows_1251.so "、" C:/RailsInstaller/Ruby1.9.3/lib/ruby/
1.9.1 / i386-mingw32 / enc / trans / transdb.so "、" C:/RailsInstaller/Ruby1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/defau
lts.rb "、" C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/i386-mingw32/rbconfig.rb "、" C:/RailsInstaller/Ruby1.9.3/l
ib / ruby​​ / site_ruby / 1.9.1 / ruby​​gems / deprecate.rb "、" C:/RailsInstaller/Ruby1.9.3/lib/ruby/site_ruby/1.9.1/rubygems
/exceptions.rb "、" C:/RailsInstaller/Ruby1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/defaults/operating_system.rb "、
 "C:/RailsInstaller/Ruby1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb"、 "C:/RailsInstaller/Ruby1.9
.3 / lib / ruby​​ / site_ruby / 1.9.1 / ruby​​gems.rb "、" C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/i386-mingw32/enc/utf_16l
e.so "、" C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/i386-mingw32/enc/trans/utf_16_32.so "、" C:/ RailsInstaller / Ru
by1.9.3/lib/ruby/1.9.1/i386-mingw32/enc/trans/single_byte.so "]
置く

#$.(ピリオドは必須です)InteractiveRubyConsoleでのみ行番号が表示されることがわかりました。任意の行で生成されるファイルで使用されます0。しかし、このような記号を使用すると、なぜすべてのテキストが印刷されるの"#$" \n "#$"でしょうか。

また、ファイル内のそのようなコード:

puts "Hello, World #$" ## without period at the end

このようなエラーが発生します:

C:\ruby\sbox>ruby str2.rb
str2.rb:3: unterminated string meets end of file

どういう#$意味ですか?どこでどのように使用しますか?

4

2 に答える 2

6

"#$."の省略形"#{$.}"、またはグローバル変数の補間です。同様に#@、インスタンス変数#@@用 & クラス変数用があります。

あなたが持っているものの問題は、 の 2 番目が文字列の終了引用符として解釈""#$"、代わりに補間されるグローバル変数名の一部として解釈されることです ( $")。コードが実際にどのように解釈されるかをより明確にするために、Ruby が文字列区切り文字と見なす代わりに文字列リテラルを使用します。

puts %(Hello, World #$.)
puts %(Hello, World #$"
puts )#$"

ご覧のとおり、これが印刷された配列 (の内容$") と末尾の「puts」文字列の由来です。コードの#$"最後の はコメントとして解釈されます。(2 番目の文字列は、2 行目と 3 行目の間の改行にまたがっていることに注意してください。)

実際に文字列として出力したい場合は#$、その一部をエスケープするか、単一引用符で囲まれた文字列を使用する必要があります。

  • "\#$" #=> "#$"
  • "#\$" #=> "#$"
  • '#$' #=> "#$"

#$文字列リテラルを使用するとわかるように、エスケープせずに補間された文字列を単に配置することは無効です。

%(#$)  #=> #<SyntaxError: (eval):2: syntax error, unexpected $undefined
       #   %(#$)
       #      ^>
于 2013-03-02T15:47:04.673 に答える
0

Ruby では、グローバル変数はドル記号を使用して定義されます。

$foo = "bar"

次のような事前定義されたグローバルがいくつかあります。

# last line number seen by interpreter
$.

ピリオドを見逃しているだけだと思います。- を使用して変数を文字列に挿入できます。

"line #{$.}"

または略記

"line #$."
于 2013-03-02T15:55:14.187 に答える