質問

この記事 procを呼び出す4つの方法Ruby 1.9では、===のうちの1つです。私はなぜこれがまったくこのように行われるのか理解していません。それは===の通常の意味と関係がありますか(2つのオブジェクトが同じオブジェクトであるかどうかを尋ねる)?

irb(main):010:0> f =-> n {[:hello, n]}
=> #
irb(main):011:0> f.call(:hello)
=> [:hello, :hello]
irb(main):012:0> f === :hello
=> [:hello, :hello]
irb(main):013:0> Object.new === Object.new
=> false
irb(main):014:0> f === f
=> [:hello, #]
.

役に立ちましたか?

他のヒント

Rubyの===は、JavaScriptとは異なり、平等性についてではありません。これは特に使用されています case式

case cats.length
  when 42                         # Uses 42      === cats.length
    puts :uh
  when /cool/i                    # Uses /cool/i === cats.length
    puts :oh
  when ->(n){ n.odd? || n/3==6 }  # Passes cats.length to the proc
    puts :my
end
.

この機能は、比較で何かを計算する必要がある場合は、工事の場合に役立ちます。

is_odd  =-> n { n%2 != 0 }
is_even =-> n { n%2 == 0 }

case 5
when is_even
  puts "the number is even"
when is_odd
  puts "the number is odd"
end

=> the number is odd
.

===の通常の意味と関係はありますか(2つのオブジェクトが同じオブジェクトであるかどうかを尋ねる)?

実際には、Rubyの===に関する共通の誤解です。それは実際にはObject#object_id比較のために厳密にはありません(それは多くの一般的な呼び出しでの動作です)。Rubyでは、===はケース sumsumption

===からのObjectの説明です。 #==を呼び出すように、通常は子孫によって上書きされます 症例文に意味のある意味論を提供するために。」

悲しいことに、それが3つの=で構成されていても、平等との関係にもリモートでさえありません: - d

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top