【发布时间】:2021-02-17 05:16:08
【问题描述】:
我似乎很难理解如何正确使用 Raku 中的类。
我正在尝试创建一个将在整个 cro 应用程序中使用的“数据库”类。但是我似乎不明白如何在对象构造(BUILD?)时设置实例变量。
下面的类显示了我在调用它时遇到的问题的示例:
调用:
my $db = Database.new(dsn => 'update me!');
say "what value is foo: " ~ $db.what-is-foo(); # prints "what value is foo: 0" but expecting 123
我的班级:
use DB::Pg;
class Database {
has Str $.dsn is required;
has DB::Pg $!dbh = Nil;
has Int $!foo = 0;
method new (:$dsn) {
my $dbh = DB::Pg.new(conninfo => :$dsn);
my $foo = 123;
return self.bless(:$dsn, dbh => $dbh, foo => $foo);
}
method what-is-foo() {
return $!foo;
}
}
所以在我的类构造函数中,我想为数据库 dsn 传递一个命名参数。 在我计划连接的新方法中,并为连接句柄设置一个实例变量。
在这个例子中,我使用一个简单的整数 (foo) 作为测试。
到目前为止,我发现 the docs here 不包含此类模式的示例,除了 pehaps:
use DB::Pg;
class Database {
has Str $.dsn is required;
has DB::Pg $!dbh = Nil;
has Int $!foo = 0;
submethod BUILD(:$dsn) {
$!dbh = DB::Pg.new(conninfo => :$dsn);
$!foo = 123;
}
method what-is-foo() {
return $!foo;
}
}
但这给了我:
The attribute '$!dsn' is required, but you did not provide a value for it.
任何帮助将不胜感激!
【问题讨论】:
标签: raku