2016-10-17 3 views
-1

모델 CarWheel이있는 레일 앱이 있습니다. 그리고 다른 개체의 배열을 반환하는 메서드가 있습니다. 예 :배열의 클래스 인스턴스 카운트

array = [Car.new, Car.new, Wheel.new, Wheel.new, 'home', 'market', 'fun'] 

어떻게 배열 Car 인스턴스와 Wheel 인스턴스를 계산하려면?

나는 array.include?(Car)array.count(Car)을 시도했지만 제대로 작동하지 않았습니다.

답변

7

당신에게 :

instance_of? 더 자세한 내용은 서브 클래스가 아닌

array.count { |e| e.instance_of? Car} 

객체가 정확한 클래스의 인스턴스 인 경우에만 true을 반환한다는 점에서 다르다 Enumerable#grep을 사용하여 Car의 인스턴스를 가져올 수 있습니다.

array.grep(Car).size 
+0

'Enumerable # grep'은 확실히 저평가되어 있습니다. – mudasobwa

+0

이것이 정말 좋은 방법이라고 말해야합니다. – Sajan

2

당신은 자동차 인스턴스를 카운트 아래와 같이 할 수 있습니다 : 그것은 더 나은 소리 경우 kind_of?을 사용할 수 있습니다

array.count { |e| e.instance_of? Car} 

또는 대신 instance_of?의.

관련 문제