我有一个lambda(或者闭包是正确的用法吗?),我理解.call的用法。 def multi(m) lambda { |n| n * m } end two = multi(2) two.call(10) #=> 20 #call the proc 但我试图理解为什么/如何这个工作?two.(20) #=> 40 two[20] #=> 40 我不知道它是否应该或不应该工作。大多数时候,我都使用方括号来处理数组。
文档 prc[params,...] → obj 执行代码块,将params中的值传递给代码块作为参数,并使用类似于方法调用语义。如果向期望一个参数的proc中传递多个值,则会生成警告(以前会将这些参数默认转换为数组)。请注意,prc.() 调用了 prc.call() 并传递给定的参数。这是一种隐藏“call”操作的语法糖。 对于使用lambda或->()创建的procs,如果向具有多个参数的proc传递错误数量的参数,则会生成错误。对于使用Proc.new或Kernel.proc创建的procs,额外的参数会被自动忽略。