如何将参数传递给方法[]的方法定义?

时间:2019-01-24 11:01:13

标签: ruby methods

如何在[]上将参数传递给A的单例方法的定义,换句话说,就是A['some_argument']

class A
  def self.[]
    # some_argument
  end
end

4 个答案:

答案 0 :(得分:8)

与其他方法一样,使用参数列表:

class A 
  def self.[](arg)
    puts arg
  end  
end  

A[1]
# => 1

答案 1 :(得分:7)

已经给出了很好的答案,但是我认为他们没有提到一个重要的观点。

方法[]通常以foo[params]的形式使用时,实际上是语法糖形式。基础方法名称为[],以基础形式调用它的方式为foo.[](params)

语法糖使用语法,并将形式为foo[params]的方法调用转换为foo.[](params)。但这在方法定义中不起作用,因此您必须以基础形式而不是语法糖形式定义这种方法。

答案 2 :(得分:5)

class A
  def self.[](*args)
    puts args
  end
end

> A[1,2,3]
   1
   2
   3

答案 3 :(得分:1)

您还可以实现“设置”功能

class A
  def self.[]=(key, value)
    puts "#{key} = #{value}"
  end
end

A['one'] = '1'
# one = 1