Хотя это и не прямой ответ на ваш вопрос, я предлагаю другой подход.
class Array
def sorted?(direction)
sorted = self.sort
case direction
when :increasing
self == sorted ? 1 : 0
when :decreasing
self == sorted.reverse ? -1 : 0
else
# <raise exception>
end
end
end
[1,2,3,4].sorted?(:increasing) #=> 1
[4,3,2,1].sorted?(:increasing) #=> 0
[1,3,2,4].sorted?(:increasing) #=> 0
[1,1,1,1].sorted?(:increasing) #=> 1
[1,2,3,4].sorted?(:decreasing) #=> 0
[4,3,2,1].sorted?(:decreasing) #=> -1
[1,3,2,4].sorted?(:decreasing) #=> 0
[1,1,1,1].sorted?(:decreasing) #=> -1
Другой способ - использовать Enumerable # each_cons .
class Array
def sorted?(op)
each_cons(2).all? { |e,f| e.public_send(op, f) } ? (op == :<= ? 1 : -1) : 0
end
end
[1,2,3,4].sorted?(:<=) #=> 1
[4,3,2,1].sorted?(:<=) #=> 0
[1,3,2,4].sorted?(:<=) #=> 0
[1,1,1,1].sorted?(:<=) #=> 1
[1,2,3,4].sorted?(:>=) #=> 0
[4,3,2,1].sorted?(:>=) #=> -1
[1,3,2,4].sorted?(:>=) #=> 0
[1,1,1,1].sorted?(:>=) #=> -1