gpt4 book ai didi

ruby - 在模块中定义类访问器的简写

转载 作者:数据小太阳 更新时间:2023-10-29 08:27:22 25 4
gpt4 key购买 nike

我发现自己经常编写如下代码:

module SomeModule
module ClassMethods
def some_attribute
@some_attribute
end
def some_attribute=(val)
@some_attribute = val
end
end
def self.included(other)
other.extend ClassMethods
end
end

class MyClass
include SomeModule
self.some_attribute = "a value"
end

上面定义的两个类方法有简写吗?类似于 attr_accessor 但用于类方法。

[编辑]

根据 sawa 的回答,self.included 方法可以更改为:

def self.included(other)
other.singleton_class.class_eval{attr_accessor :some_attribute}
end

最佳答案

你可以试试这个:

module SomeModule
def self.included(other)
class << other
attr_accessor :some_attribute
end
end
end

class MyClass
include SomeModule
self.some_attribute = "a value"
end

注意在调用some_attribute= 之前不要忘记self。您需要在 writer 方法上使用显式接收器,否则 Ruby 会认为您正在尝试在某处分配变量 =P

希望对您有所帮助!

关于ruby - 在模块中定义类访问器的简写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22379880/

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