我想知道是否有任何ruby函數或方法來找出對象的類型(Integer
,String
,Symbol
等)。在Ruby中查找對象類型的函數
回答
您所做的假設是,如果數學運算返回的值是整數,則該值的類將爲Fixnum。這是不正確的。
請看:
a = 5
puts a.class
# => Fixnum
b = 5.0
puts b.class
# => Float
數學上講,圖5和5.0是相同的數目,這個數字是一個整數。但Ruby中的5和5.0(與許多其他編程語言一樣)並不相同。一個是fixed-point值(ergo Fixnum),另一個是floating-point值(Float)。 Fixnum只能表示整數,但Float可以表示整數和分數(但是,我應該提及not all fractions)。
在Ruby中,當你做一個數學運算兩種Fixnums,一個Fixnum將返回:
a = 4
puts a.class # => Fixnum
x = a ** 2
puts x # => 16
puts x.class # => Fixnum
然而,如果其中一個號碼是浮動,則返回一個浮點數:
a = 4
x = a ** 2.0
puts x # => 16.0
puts x.class # => Float
b = 4.0
puts b.class # => Float
y = b ** 2
puts y # => 16.0
puts y.class # => Float
y = b ** 2.0
puts y # => 16.0
puts y.class # => Float
你問如何「找到一個對象的類型」,並且該問題的答案是使用Object#class
方法,如上所述。但是,正如你所看到的,「對象是一個Fixnum?」和「對象是整數嗎?」是兩個不同的問題。
如果你想知道的話,Ruby的一個數字是,即使它是一個浮動的整數,是指以優良的回答這個問題:Checking if a Float is equivalent to an integer value in Ruby
你可以在對象
obj.class
調用class method
對於實例
:test_1.class => Symbol
或者你也可以使用:instance_of? Method
puts 10.instance_of? Fixnum #=> True
puts [1,2].instance_of? Array #=> True
更多的信息你可以determining-type-of-an-object-in-ruby看到這個
希望這對你有幫助!
關於你actual problem:
我試圖找出輸入是否是一個完美的正方形。
def is_square(x) y = x ** 0.5 if y.instance_of?(Fixnum) return true else return false end end
我不斷收到
false
甚至完全平方
a ** b
只返回一個Integer
如果兩者a
和b
是整數:
4 ** 1 #=> 4
如果a
和/或b
是它將返回一個Float
:
4 ** 1.0 #=> 4.0
4.0 ** 1 #=> 4.0
4.0 ** 1.0 #=> 4.0
而且,由於你的論點0.5
是Float
,它會返回一個Float
不管x
:
2 ** 0.5 #=> 1.4142135623730951
4 ** 0.5 #=> 2.0
因此,y.instance_of?(Fixnum)
永遠不會成爲true
。
您可以將您的支票更改爲類似:
def perfect_square?(x)
y = (x ** 0.5).floor
y * y == x
end
perfect_square? 2 #=> false
perfect_square? 4 #=> true
它也可以,如果輸入的是Float
:
perfect_square? 2.0 #=> false
perfect_square? 4.0 #=> true
上意識到這是雅這是問題 –
42
是Fixnum
一個實例,Fixnum
是Numeric
一個子類。 4.2
是Float
的實例,Float
也是Numeric
的子類。
42.kind_of? Numeric
=> true
(4.2).kind_of Numeric
=> true
- 1. Ruby數組對象查找
- 2. 在對象圖中查找特定類型的對象
- 3. 阻止函數查找某些函數的對象原型?
- 4. 查找類對象數組中的值
- 5. 查找對象是否在Ruby中的數組中?
- 6. Haskell/Miranda:查找函數的類型
- 7. 瞭解Ruby中Enumerable的查找函數
- 8. 在C++中查找未知對象的類型
- 9. 在PHP中查找MySQL BLOB對象的類型
- 10. 如何在NSArray中查找某種類型的對象?
- 11. 在嵌套對象中查找特定類型的屬性
- 12. 模板對象的類型函數
- 13. Ruby on Rails:子查找找到的對象的關係對象數組?
- 14. 使用Ruby在特定數字的哈希中查找對象使用Ruby
- 15. 在Python中查找對象類
- 16. 在函數中檢查Haskell類型類
- 17. Ruby對象模型 - 類的祖先
- 18. C++查找函數返回類型
- 19. Scala REPL:如何查找函數類型?
- 20. 在Python中查找類型 - TypeError'unicode'對象不可調用
- 21. 在對象中查找自定義類型
- 22. 是否可以在對象列表中查找對象的類?
- 23. 找不到對象類型
- 24. 如何查找Ruby中兩個Date對象之間的天數?
- 25. 在Haskell中查找函數的類型簽名
- 26. 在類的構造函數中找到實例化對象
- 27. 找出函數類型在llvm中
- 28. 在原型數組中查找對象的索引Javascript
- 29. TypeError:在對象中找不到函數
- 30. '函數'類型的對象在python中沒有len()
Like'1.class'? –
@Yu Hao:我做了'y = x ** 0.5'然後'如果y.class == Fixnum返回true否則返回false end'並且我得到假的完美方塊 –
@JohnDoe您能否問一下關於您的直接問題代碼,而不是問一個普遍的問題? –