【问题标题】:Rails use define_method for assignment method is not workingRails 使用 define_method 进行分配方法不起作用
【发布时间】:2018-11-07 01:30:16
【问题描述】:

我有一个常数

TYPES = %w(car truck)

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

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

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

myobject.cars=objects

我得到一个错误方法不存在,虽然我可以追踪它

puts myobject.methods

确实有方法

cars=(objects)

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

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

define_method "#{type}s=" do |objects|

【讨论】:

    【解决方案2】:

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

    define_method "#{type}s=" do |objects|
      puts objects
    end
    

    【讨论】:

      【解决方案3】:

      define_method(symbol) { block } → symbol 实际方法在块中,块的参数是实际方法的参数。这是来自 Ruby 文档的描述。 在接收器中定义一个实例方法。方法参数可以是 Proc、Method 或 UnboundMethod 对象。如果指定了块,则将其用作方法体。该块使用 instance_eval 进行评估,这一点很难演示,因为 define_method 是私有的。 (这就是我们在本例中使用 send hack 的原因。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多