- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如何在对象上动态创建属性并将对象分配给它的值?我有以下代码:
class Component
def initialize
end
end
class BaseClass
def initialize
end
# define class methods
def self.create_component(**args)
# create attr_accessor with name "ball"
# set ball = Component.new
end
end
class ChildClass < BaseClass
create_component :name => "ball"
create_component :name => "baseball"
def initialize
end
end
我的目标是,当 ChildClass 调用“create_component”方法时,这应该使用 :name 参数中提供的名称创建一个属性,并为该属性实例化一个“Component”对象。
object = ChildClass.new
object.ball #=> to return object reference (Component class 1)
object.baseball #=> to return object reference (Component class 2)
最佳答案
您可以像这样定义 BaseClass:
class Component; end
class BaseClass
@@components = []
def initialize
@@components.each do |attr|
instance_variable_set("@#{attr}", Component.new)
end
end
def self.create_component(name:)
attr_reader name.to_sym
@@components << name
end
end
class ChildClass < BaseClass
create_component :name => "ball"
create_component :name => "baseball"
end
object = ChildClass.new
object.ball
# => #<Component:0x00007fa62fbdf3f8>
object.baseball
# => #<Component:0x00007fa62fbdf3a8>
基本上你要做三件事:
@@components
,它存储自定义attr_reader
名称的列表create_component
中,调用 attr_reader
创建方法并将其添加到 @@components
列表中initialize
中,为每个 @@components
设置初始值(如果你喜欢)。关于ruby - 如何动态创建类的 attr_reader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54525358/
如何在对象上动态创建属性并将对象分配给它的值?我有以下代码: class Component def initialize end end class BaseClass def i
我最近被下面的代码难住了: class Foo attr_accessor :n def initialize(i) @n = i end def val n en
我希望下面的代码能按预期工作,但它给了我一个 NoMethodError(为 # class MyClass end my_object = MyClass.new my_object.instanc
很抱歉这个问题,可能是真正的新手问题: 我想定义一个返回 bool 值的 getter。 f.i.: attr_reader :server_error? 但是,我该如何更新它,因为如果末尾有问号
这就是 attr_reader 与arrays 一起工作的方式吗? class User def initialize @interests = [] end attr_reade
我发现自己在我的类中初始化了很多变量,我想知道是否有更简单的方法来做到这一点。一旦你获得超过 20 个变量,它就会变得有点多余。 class Car attr_reader :make,
我正在寻找方法来创建相应的 attr_reader 方法,同时在初始化方法中为相应的实例变量设置值?例如下面的代码: class SomeClass attr_reader :hello de
我刚看完POODR的前几章.作者展示了 attr_reader(accessor) 的一个特性,除了 attr_ 的广为人知的特性之外,它还允许您在声明实例变量后引用它们时消除对“@”的需要。 但是,
我有以下代码: class A attr_reader :x, :y private_class_method :new def self.with_data a = ne
在 Ruby 中,有没有办法做类似的事情 class Foo attr_reader :var_name :reader_name #This won't work, of course
在 Ruby 中,您可以通过将以下内容添加到类定义中来创建 getter/setter 方法。 attr_reader :key1, :key2, :key4 attr_writer :key1, :
是否可以在 Ruby 中为 attr_reader 方法起别名?我有一个带有 favorites 属性的类,我想为美国用户别名为 favorites。执行此操作的惯用 Ruby 方法是什么? 最佳答案
attr_reader在 python 中是否有一个“同义词”,就像不需要让我输入的东西一样?: class Foo(): def __init__(self, foo, bar, spam,
Sorbet 显示 attr_reader 错误,但如果我错了请纠正我,当函数被声明而不是被调用时需要 sigs,对吧? 我已经尝试过阅读文档,但我得到的只是这个注释 注意:许多看起来像局部变量的 R
attr_accessor 的文档明确地说它创建了一个实例变量: [...] creating an instance variable (@name) and a corresponding acc
(大编辑,我在那里的一部分......)我一直在努力,我想出了这种方法来指定在读取属性之前需要完成的事情: class Class def attr_reader(*params) if
遇到一些奇怪的行为,想知道是否有其他人可以确认我所看到的。 假设您创建了一个带有成员变量的类,并允许使用 attr_reader 读取它。 class TestClass attr_reader
如果您编写 my_obj.attr,主要是在 Rails 中,它会在数据库中查找 attr 并返返回告。如何创建自定义 def attr 方法,在内部查询数据库中的 attr,修改它并返回?换句话说,
我正在构建一个系统,该系统使用大量小类来进行数据处理(每个类都执行不同的处理步骤,不错且类似于 SRP)。我用一些参数初始化每个类,然后调用该类的 execute() 方法,然后该类使用其他私有(pr
如何在运行时添加类实例变量、它的数据和 attr_reader? class Module def additional_data member, data self.class.send
我是一名优秀的程序员,十分优秀!