2016-03-23 20 views
-1

文字列に\1を書き込もうとしていますが、できません。誰かが私にこの奇妙な振る舞いを助けてくれたら、私は感謝しています。 Hereは説明のある例です。文字列に 1を書き込む方法

EDIT:追加の出力例

puts "\1 <- null"

puts "\\1 <- slash one"

作品!

が、IRBコマンドラインで "\1" "\\1"

を入力するには

"\1"

=> "\u0001

"\\1"

を生み出します

+2

あなたの疑問を編集してください。他のサイトへのリンクは悪くなる傾向があり、この質問や回答は今後の訪問者にはあまり役立ちません。 –

+0

文字通り*バックスラッシュを1つ*したいですか? – tadman

+0

ようこそスタックオーバーフローへ。 "[ask]"と "[mcve]"をお読みください。私たちはあなたのコードと努力のエビデンスを他の場所へのリンクではなく質問自体に含めることを期待しています。あなたの質問は誰にも分かりません。 –

答えて

5

それを得るためにいくつかの方法があります。

"\\1" 
'\1' 
?\\ + ?1 

は、あなたが望むものであるリテラルのバックスラッシュ、1を意味し、それが表示されます方法は常に"\\1"であることを忘れないでください。これが正しいことを知る方法はputsを使用することです:

puts "\\1" 
# => \1 

二重引用符で囲まれた文字列の内部では、バックスラッシュが重要な意味を持ちます。 \nは、改行文字を意味します。一重引用符で囲まれた文字列では、これは2つの文字(バックスラッシュとn)です。

あなたも、これをテストすることができます

"\\1".chars 
# => ["\\", "1"] 

'\1'.chars 
# => ["\\", "1"] 

だからあなたはRubyは解釈され見ることができる2つの文字ではなく、3など。二重引用符で囲まれた文字列の中の二番目のバックスラッシュに騙されてはいけません。これが文字通りのバックスラッシュの表現です。

+0

あなたの答えをありがとう! – mhz

+0

@mhzそれがうまくいくかどうか教えてください。もしそうなら、それをあなたの解決策として受け入れてください。他の人がそのように見つけやすいようにします。 – tadman

0

私がIRBにいて、\1と入力した場合、返される値は\u0001であり、文字を表す のRubyの方法です。

puts('\1と書くと、スクリプトを実行すると、IRBと同じ動作になります。

0 0 
0 1 

これは、すべてのプラットフォームで同じ出力されません、次のように私はUnicode文字マップを参照してください(これは、Unicodeが 表示されている方法によって異なります)。ですから、おそらくrepl.itの例では何も出力されません。

2

puts '\1'を試しましたか? (二重の代わりに一重引用符) 私はあなたが何を求めているのかは確かではありませんが、それが助けてくれれば歓迎します。

2

irbが文字列をエスケープするオブジェクトに対して.inspectを実行するため、コマンドラインに「\ 1」と表示されます。だから本質的に\ 1は適切に保存されていますが、それを表示しているときには別の\が追加されてエスケープされたことを示します

関連する問題