2010-10-05 23 views
11

Tôi muốn một lớp lót trả về true/false, kiểm tra từng phần tử trong một mảng cho dù đó là một số nguyên hay không. Vì vậy, nếu bất kỳ phần tử nào trong mảng không phải là một số nguyên, nó sẽ trả về false, đúng là sai. Đây là thử của tôi:Ruby - kiểm tra từng phần tử mảng, nhận được một kết quả

>> ([2,1,4].map {|x| (x.is_a? Integer)}).reduce {|x, result| x and result} 
=> true 
>> ([2,"a",4].map {|x| (x.is_a? Integer)}).reduce {|x, result| x and result} 
=> false 

Bất kỳ ý tưởng nào khác để chưng cất thêm nữa?

Trả lời

19
array.all?{ |x| x.is_a? Integer } 
+0

Hoàn hảo, cảm ơn nhiều. – oaklodge

+0

Cảm thấy giống như ma thuật! – mko

5
ary.all?(&Integer.method(:===)) 
+0

Tôi thực sự muốn Ruby có cú pháp tốt hơn để truy cập các phương thức. Đây là khái niệm tinh khiết hơn, nhưng trong thực tế thực tế dài hơn viết ra khối rõ ràng. – Chuck

+3

@Chuck: Yeah. Có một ý tưởng nổi xung quanh mà bật lên mỗi vài năm để làm cho một distintion tốt hơn giữa '.' (tin nhắn gửi) và' :: '(phạm vi độ phân giải) nhà khai thác. Hiện tại, '.' có nghĩa là việc gửi tin nhắn và' :: 'có nghĩa là việc gửi lại phạm vi hoặc gửi tin nhắn. Nếu chúng ta loại bỏ phần "hoặc gửi tin nhắn" từ '::', chúng ta có thể mở rộng nó để cho phép các công cụ như 'foo :: bar' có nghĩa là' foo.method (: bar) '. Hiện tại, điều đó không có tác dụng vì 'foo :: bar' có nghĩa là' foo.bar'. –

+0

Tôi thích phong cách miễn phí này .. :) –

Các vấn đề liên quan