我正在开发一个小型应用程序,并且遇到了ruby的OOP模型的问题.我有以下简化的类结构.
class Foo
protected
@bar = []
def self.add_bar(val)
@bar += val
end
def self.get_bar
@bar
end
end
class Baz < Foo
add_bar ["a", "b", "c"]
end
Run Code Online (Sandbox Code Playgroud)
我现在的问题是,当我在Baz的类定义中调用add_bar时,@bar
显然没有初始化,我得到一个+
运算符不可用的错误nil
.调用add_bar
上Foo
直接不会产生这个问题.为什么这样,我如何@bar
正确初始化?
为了弄清楚我想要什么,我将指出我期望从这些类中获得的行为.
Foo.add_bar ["a", "b"]
Baz.add_bar ["1", "2"]
Foo.get_bar # => ["a", "b"]
Baz.get_bar # => ["a", "b", "1", "2"]
Run Code Online (Sandbox Code Playgroud)
我怎么能实现这个目标?
在我的应用程序中,我实质上有以下类
TCategory = class(TAbstractionTreeItem)
private
fName: String;
fParent: Integer;
fComment: String;
public
procedure Default; override;
protected
procedure Validate(Validation: TValidation); override;
published
[AbstractionField]
property Name: string read fName write fName;
[AbstractionField]
property Parent: Integer read fParent write fParent;
[AbstractionField]
property Comment: String read fComment write fComment;
end;
Run Code Online (Sandbox Code Playgroud)
当我现在尝试通过Delphi XE中的高级RTTI获取有关信息时,我获取已发布属性的可见性信息,结果告诉我它们只是公开的,并且我添加的属性根本没有显示.
那里发生了什么?我已经尝试验证它是我尝试分析的正确类,并且在发生更改时重新编译属于它的单元.这似乎不是问题.