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

Rails使用define_方法分配方法不起作用

  •  0
  • Petran  · 技术社区  · 6 年前

    我有一个常数

    TYPES = %w(car truck)
    

    我想动态定义自定义分配方法

    TYPES.each do |type|
      define_method "#{type}s=(objects)" do
    

    但它不起作用, 当我打电话的时候

    myobject.cars=objects
    

    puts myobject.methods
    

    有方法吗

    cars=(objects)
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Danil Speransky    6 年前

    define_method 需要方法名,而不是签名。

    define_method "#{type}s=" do |objects|
      puts objects
    end
    
        2
  •  1
  •   Szymon    6 年前

    你必须写这样的东西才能让它工作:

    define_method "#{type}s=" do |objects|
    
        3
  •  0
  •   Daniel    6 年前

    define_method(symbol) { block } → symbol 实际方法在块中,块的参数是实际方法的参数。这是Ruby文档的描述。 在接收器中定义实例方法。method参数可以是proc、method或unboundmethod对象。如果指定了块,则将其用作方法体。这个块是使用实例评估的,这个点很难证明,因为define方法是私有的。(这就是我们在本例中使用send hack的原因。)