6

文字列があり、str = "xyz\123"そのまま印刷したいのですが。

IRBは私に予期しない出力を与えています。以下で同じものを見つけてください:-

1.9.2p290 :003 > str = "xyz\123"
 => "xyzS" 
1.9.2p290 :004 > 

IRBに元の文字列(「xyz \ 123」)を印刷させる方法に関するアイデア。

ありがとうございました..

更新

逃げてみましたが、どういうわけかそれほど単純ではないようです。同じもので私の試験を以下で見つけてください:

1.9.2p290 :004 > str = "xyz'\'123"
 => "xyz''123" 
1.9.2p290 :005 > str = "xyz'\\'123"
 => "xyz'\\'123" 
1.9.2p290 :006 > str = "xyz'\\\'123"
 => "xyz'\\'123" 
1.9.2p290 :007 > 
4

4 に答える 4

5

更新された回答:

エスケープトークン「\」は常にプレーンなルビーコードで機能しますが、「ルビーコンソール」では常に機能するとは限りません。したがって、単体テストを作成することをお勧めします。

# escape_token_test.rb 
require 'test/unit'
class EscapeTokenTest < Test::Unit::TestCase
  def test_how_to_escape
    hi = "hi\\backslash"
    puts hi
  end 
end

結果は次のようになります。

hi\backslash

@pstのコメントを参照してください。

于 2012-04-10T04:57:07.697 に答える
3

バックスラッシュ文字はエスケープ文字です。「\n」が改行を表示するために使用されているのを見たことがあるかもしれません。それが理由です。「\123」は、「S」である83のASCIIコードを評価します。バックスラッシュを印刷するには、2つのバックスラッシュを使用します。したがって、を使用できますstr = "xyz\\123"

于 2012-04-10T04:57:42.080 に答える
0

バックスラッシュを印刷する方法は?

2つの円記号を使用します。例:"xyz\\123"

なぜ"xyz\123"評価するの"xyzS"ですか?

二重引用符で囲まれた文字列で\nnnは、8進数のエスケープです。

表22.2  二重引用符で囲まれた文字列の置換

Thomas、D.(2009)プログラミングRuby、p.329

したがって、8進数の123
=(64 * 1)+(8 * 2)+3
=10進数の83
=ASCIIS

于 2014-07-20T02:30:23.347 に答える
-1

簡単です...ダンプ関数を試してください:

mystring = %Q{"Double Quotes"}
p mystring.dump
=> "\"\\\"Double Quotes\\\"\""
p mystring
=>"\"Double Quotes\""
于 2016-11-08T18:48:38.883 に答える