【发布时间】:2014-08-03 18:33:56
【问题描述】:
创建一个可以这样调用的方法
some_named_method(string_1, string_2, int_1, int_2)[Integer]
我刚刚了解到,如果像 some_named_method[80] 那样调用方法 - 该方法是 Proc / lambda(?仍然有点不确定,任何详细说明都会很棒)
准则是,参数是可选的,根据提供的测试,以两个为一组,但括号中的数字将始终存在。它用于创建一个Array,对其进行操作,取决于传入的params..所以->
some_named_method[Integer]# => [0..整数]
some_named_method('Hey', 'There')[Integer] # 一些基于字符串参数的操作 => [0..Integer]
some_named_method('Hey', 'There', 3, 5)[Integer]
如何以这种方式使 lambda 具有可选参数?
回答(我认为)
当以这种方式调用方法时,some_named_method(*args)[Integer],会发生两件事之一。任一方法返回一个数组,因此在该数组上调用#[],返回指定索引处的任何对象
或
该方法包含一个 proc / lambda,#[some_arguement] 中的任何内容都作为参数传递给该 proc / lambda
【问题讨论】:
-
它被称为方法,它非常常见:
def foo; 42 end; foo() #=> 42。不幸的是,函数和方法经常被某些人互换使用。 -
不太确定您在问什么,但该方法可以是任何采用 splat 运算符并使用
[]方法返回对象的方法,例如def fizz_buzz_custom(*a) a end -
f(x)[y]与z = f(x); z[y]相同,因此您的方法可以返回respond_to? :[]的任何内容。 -
@JamesGibsonWeber 你说得对,我不明白,因为我不清楚这个问题。
-
所以
foo()必须返回一些对象,它有一个方法[]。例如数组。请注意,foo()[x]与foo[x]相同,如果 foo 没有使用 args