Ruby言語誤り総括-入門レベルチュートリアル(二)

2284 ワード

1、Rubyの=====eqlについて?equal?の違い
 
 
obj == other_obj  ->  true or false
Objectクラスレベルではobjとother_を判断するobjが同一オブジェクトであるかどうか(両者のobject_idは必ず同一であると理解できる).しかし、通常、サブクラスは==メソッドを書き換えて、自分の比較論理を加えます.各サブクラスには異なる実装がありますが、一般的な役割は、2つのオブジェクトの値が同じかどうかを比較することです.
 
obj === other_obj  ->  true or false
主にcase文の比較に使用されます.効果は==と同じですが、case文のニーズに適応するために布団類を書き換えるのが一般的です.典型的には正規表現の==メソッドです.
 
obj.equal? (other_obj)  ->  true or false
判断objとother_objのobject_idが同じかどうか.サブクラスはこの方法を書き換えません.どのオブジェクトでも効果は同じです
 
obj.eql? (other_obj)  ->  true or false
判断objとother_objの値が同じかどうか.和==差は多くありませんが、Numericタイプなど、細かい違いがあります.eql?(1.0)はfalseを返します.両者のタイプが異なるため、==はタイプ変換をして比較します.
 :
ary1 = %w{cat dog}  
ary2 = %w{cat dog}  
  
#    ==  
ary1 == ary2     # true  
1 == 1.0         # true  
  
#    equal?  
ary1.equal? ary2 # false  
1.equal? 1       # true         object_id   ,   Symbol    
  
#   eql?  
ary1.eql? ary2   # true  
1.eql? 1         # true  
1.eql? 1.0       # false        
  
#    ===  
/string/ == "string"  # false  
/string/ === "string" # true    case         Regexp ===    
  
Symbol.class_eval do  
  #   Symbol ===  ,        “  ”      
  def ===(value)  
    value.is_a?(String) ? self.to_s == value : super  
  end  
end  
  
case "string"  
when :string #       :string === "string",      
  true  
else  
  false  
end  
 
 
2、文字列索引の誤り:
str = "abcdef"
p str[0]
このように印刷するのは97で、直接インデックス文字列の結果は文字そのものではなくASCIコードであるためstr[0]を用いる.chrメソッドで文字を取り出すことができます
 
 
3、ルビーの中で、変数の前の2点:x
これはアセンブリ言語でよく見られるもので、変数を表す字面値literal、:xはプログラムのコンパイル中に変わらない.例えばhashでは、変数が変化しないように「aaa」=>:xという表現が一般的である.
 
4、文字列の比較
Rubyでの文字列比較はsizeではなく、最初の文字からASCIを比較します.
 
例えばstr 1=「dadaffafdg」
  str2 = "ioafdp"
比較の結果はもちろんstr 2>str 1
 
5、文字列の演算方法-乗算
p "hello"* 3 
その結果、helloを3回印刷します.つまりhellohellohelloです.
 
 
6、配列のインデックス、負数の場合
 s = ["1", 2, 39, 2, 12]
では、s[-1]は12です.負のインデックスの場合、最後の要素は-1です.