Ruby 如何始终将类方法附加到链式方法调用
让我们假设您有一个类Ruby 如何始终将类方法附加到链式方法调用,ruby,inheritance,method-chaining,Ruby,Inheritance,Method Chaining,让我们假设您有一个类class,其中包含N个可以链接的类方法(DB模型的东西): 类 def self.foo(a) @a=a 自己 结束 ... 结束 所以可以像Class.foo(a).bar(b)等那样调用它 现在,您有了一个子类ChildClass,您不希望在最后总是添加另一个链式方法: class-ChildClass
class
,其中包含N个可以链接的类方法(DB模型的东西):
类
def self.foo(a)
@a=a
自己
结束
...
结束
所以可以像Class.foo(a).bar(b)
等那样调用它
现在,您有了一个子类ChildClass
,您不希望在最后总是添加另一个链式方法:
class-ChildClass
所以
ChildClass.foo(a).bar(b)
永远都是
ChildClass.foo(a).bar(b).buzz(r)
为什么ChildClass.foo(a).bar(b).buzz(r)
而不是ChildClass.foo(a).buzz(x).bar(b).buzz(r)
。如果只调用ChildClass.foo(a)
会怎么样?应该返回ChildClass.foo(a)
还是ChildClass.foo(a).buzz(r)
?什么是r
?我不太明白你的第一个问题。方法的名称和var\args的名称完全是随机的,只有为了方便起见,链接方法的数量才能有所不同。无论一个链中调用了多少方法(0到无穷大),都应该调用buzz
方法。因此,如果没有调用-我们只调用buzz
。如果只调用foo
,我们将追加buzz
。它是如何表示什么是r
?假设它是一个散列。我的问题是,如果存在一个没有默认值的必需参数,调用ChildClass.foo(a).bar(b)
如何等于ChildClass.foo(a).bar(b).buzz(r)
?为ChildClass.foo(a).bar(b)
上的buzz
提供的参数是什么?它是否可以从类或其他调用的方法中推断出来?您可以假设class和ChildClass是数据库模型,并且每个链接方法都返回某种形式的数据集
对象(但不是实际的数据)。您可以将foo
、bar
和buzz
替换为select
、where
和order
。它们的参数是将传递到数据集对象的对象。您是否在谈论类似于active record如何在方法链的末尾自动计算查询的内容?为什么ChildClass.foo(a).bar(b).buzz(r)
而不是ChildClass.foo(a).buzz(x).bar(b).buzz(r)
。如果只调用ChildClass.foo(a)
会怎么样?应该返回ChildClass.foo(a)
还是ChildClass.foo(a).buzz(r)
?什么是r
?我不太明白你的第一个问题。方法的名称和var\args的名称完全是随机的,只有为了方便起见,链接方法的数量才能有所不同。无论一个链中调用了多少方法(0到无穷大),都应该调用buzz
方法。因此,如果没有调用-我们只调用buzz
。如果只调用foo
,我们将追加buzz
。它是如何表示什么是r
?假设它是一个散列。我的问题是,如果存在一个没有默认值的必需参数,调用ChildClass.foo(a).bar(b)
如何等于ChildClass.foo(a).bar(b).buzz(r)
?为ChildClass.foo(a).bar(b)
上的buzz
提供的参数是什么?它是否可以从类或其他调用的方法中推断出来?您可以假设class和ChildClass是数据库模型,并且每个链接方法都返回某种形式的数据集
对象(但不是实际的数据)。您可以将foo
、bar
和buzz
替换为select
、where
和order
。它们的参数是将被传递到数据集
对象的对象。您是否在谈论类似于active record在方法链末尾自动计算查询的方式?