我不是一个Ruby的人,所以我可能会错过一些非常基本的东西,但我还没有弄清楚:假设我有一个包含任意数量的2个元素数组的整数。我想按位xor每组两个整数。
我现在用的是非常明显的
l.map {|n1, n2| n1 ^ n2}不过,我的第一个想法是按照l.map &:^的思路做一些事情。显然,这是不可能的,因为不存在像Array#^这样的东西,并且得到的proc不进行参数解包装。是否有一种很好的方法来使用符号来编程逻辑,或者我是否坚持使用函数,但毫无疑问,我目前使用的解决方案不那么优雅?
致以敬意,
磷酸铜
发布于 2014-03-27 23:03:27
有一种使用Symbol#to_proc的方法,但是它不会比您已经拥有的(非常好的)解决方案更好,因为它涉及定义Array#^。
class Array
def ^
raise("Not a two-element array") unless (self.length == 2)
raise("Array contains non-numeric values") unless (self.all? {|n| Integer === n })
return self[0] ^ self[1]
end
end
l.map(&:^)发布于 2014-03-27 23:15:40
恐怕(?)你已经找到了最简单的写作方法。
有一些使用Symbol#to_proc的方法,但它们没有那么好:
arr = [[1, 2], [2, 5], [23, 100], [5, 1], [4, 10]]
arr.map { |a, b| a ^ b }
# => [3, 7, 115, 4, 14]
arr.map { |pair| pair.reduce(&:^) }
#=> [3, 7, 115, 4, 14] https://stackoverflow.com/questions/22700255
复制相似问题