Giả sử tôi có một mảng giá trị [a, b, c, d, ...] và hàm f (x, ...) trả về giá trị true hoặc false.Cách tiếp cận chức năng tốt nhất với AND trên danh sách
[1,2,3,4].map {|x| f(x)} => [true true false true]
Trước tiên, cách tốt nhất để thu gọn danh sách kết quả thành giá trị đúng hoặc sai (qua AND) là gì? Có một chức năng mà sẽ cho phép tôi để lập bản đồ:
[true true false true]
tới:
((true && true) && false) && true
sử dụng một ứng dụng cặp-khôn ngoan tích lũy của các nhị phân điều hành & &?
Trong trường hợp này, chi phí đánh giá chức năng là không hợp lý, vì vậy muốn sử dụng kiểu "và" để đánh giá các đối số (các ứng dụng chức năng) tuần tự cho đến khi một trong số đó sai. Xác định rằng có thể làm:
!![1,2,3,4].each {|x| break false if !f(x) }
Điều gì là xấu xí. Hy vọng rằng có một cách thanh lịch hơn để làm điều này. Tôi biết rằng tôi có thể thêm một hiểu mới vào mảng, nhưng hy vọng rằng có một cái gì đó được xây dựng trong đó làm điều này tốt hơn. Cảm ơn
Xin lỗi vì đã viết nitpicking, nhưng 'Fixnum' đã có phương thức' even? 'Và' odd? '...;) –
@Mladen Jablanovic, Good point. Đối với ví dụ này, tôi muốn có một hàm do người dùng định nghĩa. –