将比较运算符作为参数传递给 Ruby 中的方法的最佳方法是什么?我想创建一个通用的排序?数组识别器,并将“<=”或“>=”传递给此方法。
到目前为止,我有这个代码:
class Array
def sorted?
return 1 if sorted_increasing?
return -1 if sorted_decreasing?
0
end
def sorted_increasing?
return true if length < 2
self[0] <= self[1] && self.drop(1).sorted_increasing?
end
def sorted_decreasing?
return true if length < 2
self[0] >= self[1] && self.drop(1).sorted_decreasing?
end
end
– 似乎使用 sorted_generic?(comparison_operator) 方法而不是 sorted_increasing 会更好?和 sorted_decreating?
更新:感谢您的回复,我的解决方案如下:
class Array
def sorted?
return 1 if sorted_generic?(:<=)
return -1 if sorted_generic?(:>=)
0
end
def sorted_generic?(comparison)
return true if length < 2
self[0].send(comparison, self[1]) &&
self.drop(1).sorted_generic?(comparison)
end
end