小编Hal*_*oDu的帖子

在Ruby中初始化类实例变量

我正在开发一个小型应用程序,并且遇到了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_barFoo直接不会产生这个问题.为什么这样,我如何@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)

我怎么能实现这个目标?

ruby oop ruby-on-rails

19
推荐指数
1
解决办法
2万
查看次数

错误的RTTI可见性信息和缺少的属性

在我的应用程序中,我实质上有以下类

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获取有关信息时,我获取已发布属性的可见性信息,结果告诉我它们只是公开的,并且我添加的属性根本没有显示.

那里发生了什么?我已经尝试验证它是我尝试分析的正确类,并且在发生更改时重新编译属于它的单元.这似乎不是问题.

delphi attributes visibility rtti delphi-xe

1
推荐指数
1
解决办法
1345
查看次数

标签 统计

attributes ×1

delphi ×1

delphi-xe ×1

oop ×1

rtti ×1

ruby ×1

ruby-on-rails ×1

visibility ×1