Ruby serializable_hash super如何获取在我的重写方法中定义的选项?

Ruby serializable_hash super如何获取在我的重写方法中定义的选项?,ruby,super,Ruby,Super,在活动记录模型中,我们覆盖serializable_hash方法,并在根据需要设置选项后调用super options 一般来说,我们会: def serializable_hash options=nil options ||= { only: [ :id, :special_instructions ], include: { images: nil }, methods: [:catalog_item_

在活动记录模型中,我们覆盖
serializable_hash
方法,并在根据需要设置选项后调用
super options

一般来说,我们会:

def serializable_hash options=nil
    options ||= {
      only: [
        :id,
        :special_instructions
      ],
      include: { images: nil },
      methods: [:catalog_item_name, ]
    }
    super options
  end
但在其中一个模型中,我们意外地将选项
显式地传递给super方法。然而,它似乎正在发挥作用,就好像我们正在通过这些选项一样

在阅读了之后,我们似乎找不到在super方法中正确初始化选项的任何理由

关于这是怎么发生的有什么提示吗

很自然,尝试在ruby脚本中复制结构似乎不会以相同的方式实现。 以下是我们为尝试而编写的内容:

module MyModule
  def my_module_method options=nil
    options ||= { test: 'Test' }
  end
end

class MyTest
  include MyModule

  def my_module_method
    options = { bingo: 'Bingo!' }
    super
  end
end

puts MyTest.new.my_module_method
这将打印
{test:'test'}
,如果我们通过了选项(
超级选项
),将打印
{bingo:'bingo!'}
(正如我们预期的那样)

(相当旧的):

当您在没有参数的情况下调用
super
时,Ruby会向当前对象的父对象发送一条消息,要求它调用与当前方法同名的方法,并将传递给当前方法的参数传递给它

鉴于此:

class C
  def m(x)
    puts x
  end
end
class D < C
  def m(x)
    super
  end
end
D.new.m(6)
C类
def m(x)
放x
结束
结束
D类
您将看到
6
,因为
D#m
x
参数在
super
中是隐式的,而您没有为
m
的父版本提供任何显式参数

MyTest#my_module_方法
定义中添加一个参数,您将看到一些内容。

来自(相当旧的):

当您在没有参数的情况下调用
super
时,Ruby会向当前对象的父对象发送一条消息,要求它调用与当前方法同名的方法,并将传递给当前方法的参数传递给它

鉴于此:

class C
  def m(x)
    puts x
  end
end
class D < C
  def m(x)
    super
  end
end
D.new.m(6)
C类
def m(x)
放x
结束
结束
D类
您将看到
6
,因为
D#m
x
参数在
super
中是隐式的,而您没有为
m
的父版本提供任何显式参数

MyTest#my_module_方法
定义中添加一个参数,您将看到一些东西