gpt4 book ai didi

ruby - 有条件地调用链式方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:32 28 4
gpt4 key购买 nike

链式方法只应在以下代码中的特定情况下调用。

class Klass
def foo
puts 'foo'
self
end
def bar
puts 'bar'
self
end
end

klass = Klass.new
a = 2
id = klass.foo{conditionally chain bar if a == 2}.bar

您能否在有条件地继续或停止方法链的链式方法之间插入表达式或方法?

最佳答案

这个很简单,谁来了你马上就明白了:

klass = klass.foo
klass = klass.bar if a == 2
etc...

如果链式方法不带参数,这很有效

klass.define_singleton_method :chain_if do |b, *s|
return unless b
klass = self
s.each do |x|
klass = klass.send x
end
klass
end

klass.foo.chain_if(true, :foo, :bar).chain_if(false, :bar)

这里有一些重复的主题!

conditional chaining in ruby

Add method to an instanced object

在这里我找到了另一个我个人喜欢的解决方案:

my_object.tap{|o|o.method_a if a}.tap{|o|o.method_b if b}.tap{|o|o.method_c if c}

编辑:

注意 tap 定义如下:

class Object
def tap
yield self
self
end
end

如果链式方法返回一个新的不可变对象(immutable对象),您需要的可能如下所示:

class Object
def tap_and_chain
yield self
end
end

关于ruby - 有条件地调用链式方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744368/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com