gpt4 book ai didi

Ruby 以一种方法获取和设置

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

我想知道在 Ruby 中创建自定义 setter 和 getter 方法的规范方法是什么。通常,我会通过 attr_accessor 执行此操作,但我是在创建 DSL 的上下文中。在 DSL 中,setter 是这样调用的(使用 = 符号将创建局部变量):

work do
duration 15
priority 5
end

因此,它们必须这样实现:

def duration(dur)
@duration = dur
end

然而,这使得实现 getter 有点棘手:创建一个具有相同名称但没有参数的方法只会覆盖 setter。

所以我编写了自定义方法来执行设置和获取:

def duration(dur=nil)
return @duration = dur if dur
return @duration if @duration
raise AttributeNotDefinedException, "Attribute '#{__method__}' hasn't been set"
end

这是解决问题的好方法吗?这是测试用例的要点:

Ruby Custom Getters & Setters

谢谢!

最佳答案

棘手的情况是,如果您想将持续时间设置为零。我可以想到两种方法来做到这一点

def duration(*args)
@duration = args.first unless args.empty?
@duration
end

允许人们传递任意数量的参数并根据数量决定要做什么。如果传递了多个参数,您也可以引发异常。

另一种方式是

def duration(value = (getter=true;nil))
@duration = value unless getter
@duration
end

这稍微利用了默认参数:它们几乎可以是任何表达式。

当不带参数调用时,getter 设置为 true,但是当提供参数时(即使它是 nil),默认值不会被评估。由于局部变量作用域的工作方式,getter 最终为 nil。

可能有点聪明,但方法体本身更干净。

关于Ruby 以一种方法获取和设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11297215/

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