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を返します.両者のタイプが異なるため、==はタイプ変換をして比較します.
:
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です.
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です.