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_方法
定义中添加一个参数,您将看到一些东西