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在方法链末尾自动计算查询的方式?