0

以下のコードがどのように機能しているのか本当に理解できません...

options.each { |p|  
  p[0] == '-'[0] の場合  
    壊す  
  終わり...

本当にこの文字列をチェックしますか? "-[0]"?? または私は何かを逃していますか?
このばかげた質問で申し訳ありませんが、私の心は今ブロックされています...

4

2 に答える 2

6

Ruby 1.8 以下で得られるのは'-'[0]45 で、これは-文字の ASCII 値です。p[0]つまり、これはが 45 に等しいかどうかをチェックしています。

Ruby 1.9 では'-'[0]が返されるため、ASCII 値が必要な場合は代わり'-'に使用することをお勧めします。String#ord

if p[0] == '-'.ord
于 2012-06-20T17:48:24.860 に答える
0

この比較は、バージョン1.8と1.9の間のrubyの異なるstring[index]セマンティクスの回避策のようです。@robbritは、これら2つの動作の違いについて説明しました。比較の左側と右側の両方が[0]を使用して文字列の最初の文字を取得しているため、両方ともASCII序数(1.8)を取得するか、両方とも1文字の長さの文字列(1.9)を取得します。どちらのバージョンでも有効な比較。この動作の差異を回避するためのもう1つの一般的な構成は、範囲の添え字を使用して、いずれかのバージョンのrubyで単一文字の文字列を取得することです。

str[0..0] == '-'
于 2012-06-20T18:05:22.820 に答える