我有一个整数数组
a = [3, 4, 5, 6]
我需要为这些数字付费,所以它们就像这样
a
# => [9, 16, 25, 36]
我正试图用这段代码做到这一点:
a.map!(&:**2)
但不起作用:(
任何人都可以帮助我吗?
答案 0 :(得分:3)
如果您愿意,可以使用&
的lambda:
square = lambda { |x| x**2 }
a.map!(&square)
这种事情是毫无意义的繁忙工作,一个块如此简单,但如果你有一系列这样的东西并且这些块更复杂,那就更好了:
ary.select(&some_complicated_criteria)
.map(&some_mangling_that_takes_more_than_one_line)
...
收集lambdas中的逻辑位,以便您可以命名这些步骤有其用途。
答案 1 :(得分:2)
答案 2 :(得分:1)
作为规则,您不能使用&:sym
语法向方法添加参数。
但是,如果您按照我的建议here,您可以执行以下操作:
class Symbol
def with(*args, &block)
->(caller, *rest) { caller.send(self, *rest, *args, &block) }
end
end
a.map!(&:**.with(2))
# => [9, 16, 25, 36]
答案 3 :(得分:0)
如果要在没有参数的对象上调用方法,则只能使用&:
快捷方式语法。在这种情况下,您需要将2
作为参数传递给**
方法。
相反,将块扩展为完整语法
a.map! { |n| n**2 }