2011-04-23 42 views
-3

我有一個哈希這是h = {"1"=>"0-20%"}爲什麼instance_of?(散)返回錯誤的結果

我檢查h.instance_of?(Hash)應返回false但它返回true

爲什麼?

+6

呃,你爲什麼認爲它應該返回false? – delnan 2011-04-23 17:29:55

+0

也許(難以猜測)OP認爲如果使用文字符號,它與調用'Hash.new'不一樣? – Phrogz 2011-04-23 18:45:42

+0

我認爲OP需要[閱讀文檔](http://rubydoc.info/stdlib/core/1.9.2/Object#instance_of%3F-instance_method)並調整他的前提,並且更改或刪除題。 – 2011-04-24 05:21:49

回答

4

h是哈希類的實例和

按照here

返回如果obj是 給定類的實例。另見 對象#kind_of ?.

因此根據定義h.instance_of?(Hash)將返回true。

+0

如果我需要檢查該值是否爲散列,那麼情況如何?我怎樣才能做到這一點?因爲現在我有一個散列值,它可以是散列值。 – user702160 2011-04-23 17:40:55

+1

你可以做'h [「1」]。instance_of?(Hash)' – 2011-04-23 17:44:40

+0

「那麼如果我需要檢查這個值是否是散列呢?你以同樣的方式做,只有你測試該值,而不是包含哈希值。 Ruby中的所有東西都是一個對象,並且所有對象都從Object繼承,它包含您正在使用的'instance_of?'方法。 – 2011-04-24 05:24:04

1

沒有instance_of。可能你想要做instance_of?。它應該返回true,因爲它是一個散列。

0

這是一個很好的問題。但是錯過了代碼的執行上下文。應該提到的是,這個問題有ruby-on-rails標籤。

我不知道具體情況,但在某些情況下,您的Hash可以升級爲ActiveSupport::HashWithIndifferentAccess。這導致instance_of?返回false

在這種情況下使用kind_of?