代码之家  ›  专栏  ›  技术社区  ›  shaan

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

  •  5
  • shaan  · 技术社区  · 6 年前

    如何将参数传递给 [] A 换句话说, A['some_argument'] ?

    class A
      def self.[]
        # some_argument
      end
    end
    
    4 回复  |  直到 6 年前
        1
  •  8
  •   mrzasa    6 年前

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

    class A 
      def self.[](arg)
        puts arg
      end  
    end  
    
    A[1]
    # => 1
    
        2
  •  7
  •   sawa    6 年前

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

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

    语法sugar与语法一起使用,并以这种形式转换方法调用 福奥[帕拉姆斯] 进入之内 Fo.[](PARAMS) .但这在方法定义中不起作用,所以您必须在底层形式中定义这种方法,而不是在语法sugar形式中。

        3
  •  5
  •   Raj    6 年前
    class A
      def self.[](*args)
        puts args
      end
    end
    
    > A[1,2,3]
       1
       2
       3
    
        4
  •  1
  •   vovan    6 年前

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

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