可以动态创建 class 别名吗?
Possible to create class aliases dynamically?
知道了class:
class Mass-lb is Mass {
method new(Rat:D() $value = 1.0) {
self.bless(
:abbr('lb'),
:base_value(453.59237),
:$value,
);
}
}
我创建了这样的别名:
class Mass-lbs is Mass-lb { }
class Mass-pound is Mass-lb { }
class Mass-pounds is Mass-lb { }
class Mass-pnds is Mass-lb { }
但我更愿意这样做:
my @lb-syn = < lbs pounds pound pnds >;
for @lb-syn {
EVAL 'class ::("Mass-$_") is Mass-lb {}';
}
这会引发错误:
Name ::("Mass-$_") is not compile-time known, and can not serve as a package name
PHP 有一个用于创建别名的内置函数:https://www.php.net/manual/en/function.class-alias.php
我找不到类似乐曲的内容。
在 RakuAST 中有一个 class,您可以调用它来创建新类型。但是RakuAST分支还没有落地
到那时,你使用EVAL
的方法是有效的,你只需要让它更简单一点:
class Mass-lb { }
BEGIN "constant Mass-$_ = Mass-lb".EVAL
for <lbs pounds pound pnds>;
my $mlb = Mass-lbs.new;
- 确保在
BEGIN
时间创建了别名。
- 不需要 subclass,你可以使用
constant
作为别名。
- 由于
constant
默认为 our
,因此它们在 EVAL
. 之外可见
知道了class:
class Mass-lb is Mass {
method new(Rat:D() $value = 1.0) {
self.bless(
:abbr('lb'),
:base_value(453.59237),
:$value,
);
}
}
我创建了这样的别名:
class Mass-lbs is Mass-lb { }
class Mass-pound is Mass-lb { }
class Mass-pounds is Mass-lb { }
class Mass-pnds is Mass-lb { }
但我更愿意这样做:
my @lb-syn = < lbs pounds pound pnds >;
for @lb-syn {
EVAL 'class ::("Mass-$_") is Mass-lb {}';
}
这会引发错误:
Name ::("Mass-$_") is not compile-time known, and can not serve as a package name
PHP 有一个用于创建别名的内置函数:https://www.php.net/manual/en/function.class-alias.php
我找不到类似乐曲的内容。
在 RakuAST 中有一个 class,您可以调用它来创建新类型。但是RakuAST分支还没有落地
到那时,你使用EVAL
的方法是有效的,你只需要让它更简单一点:
class Mass-lb { }
BEGIN "constant Mass-$_ = Mass-lb".EVAL
for <lbs pounds pound pnds>;
my $mlb = Mass-lbs.new;
- 确保在
BEGIN
时间创建了别名。 - 不需要 subclass,你可以使用
constant
作为别名。 - 由于
constant
默认为our
,因此它们在EVAL
. 之外可见