在ruby方法上调用#[]

时间:2014-08-03 18:33:57

标签: ruby lambda proc

创建一个可以这种方式调用的方法

some_named_method(string_1, string_2, int_1, int_2)[Integer]

我刚刚得知如果一个方法被调用some_named_method[80] - 那个方法是一个Proc / lambda(?还是有点不确定,任何详细说明都会很棒)

指南是,参数是可选的,基于提供的测试,以两个为一组,但括号中的数字将始终存在。它用于创建一个操作的数组,取决于传入的参数。所以 - >

some_named_method[Integer]#=> [0..Integer]

some_named_method('Hey', 'There')[Integer]#一些基于字符串参数的操作和=> [0..Integer]

some_named_method('嘿','有',3,5)[整数]

如何以这种方式使lambda具有可选参数?

答案(我认为)

当以这种方式调用方法some_named_method(*args)[Integer]时,发生了两件事之一。该方法返回一个数组,因此在该数组上调用#[],返回指定索引处的任何对象

该方法包含proc / lambda,#[some_arguement]内的任何内容都作为参数传递给proc / lambda

1 个答案:

答案 0 :(得分:1)

如果我理解了这个问题,你需要一个接受任意数量参数的方法,并返回一个在使用[]方法时会创建一系列数字的对象。

此方法接受任意数量的参数(使用* splat运算符),然后返回一个可以使用[]的proc。

def some_named_function(*args)
  proc do |length|
    # Do something with the args?
    (0..length).to_a
  end
end

然后就可以这样使用:

some_named_function[3] # => [0, 1, 2, 3]
some_named_function('optional', 'args')[1] # => [0, 1]