在计算机编程中,特征是一组方法,用作“构建面向对象程序的简单概念模型”
为了熟悉 Rust,我自己编写了一个由 BitVec 支持的布隆过滤器。其中一部分将包括一个 save 方法,该方法使用 serde 和 w 序列化整个结构......
您可能会从下面的问题中看出,我对 Rust 作为一门语言还很陌生。作为一种“Hello World”,我承担了用 ru 编写布隆过滤器的任务......
所以,这就是我的特点: 特征可缓存 { 受保护静态 $isCacheEnabled = false; 受保护的静态$cacheExpirationTime = null; 公共静态函数 isCacheEnabled() {
有没有一种方法可以借用类型并在内部类型上添加特征绑定(即您有类型 &T 但想要说出 T 的位置) 我以为我可以要求 &T 拥有 ToOwned...
我有这个结构: #[derive(可查询、关联、可识别)] #[柴油(属于(用户))] #[柴油(属于(任务))] pub 结构 UserTask{ 酒吧 ID:i32, 酒吧用户id:i32, 酒吧任务 ID:...
我有这个片段: 使用 std::fmt::调试; 使用 std::ops::Index ; 使用 len_trait::Len; pub 特征容器:默认 + 调试 + 克隆 { 类型索引类型; 类型 ValueType:默认 + 克隆; ...
如何使用 laravel 5.1 更新记录的 user_id 来填充 Modified_by?
使用 Laravel 5.1 时,我尝试创建一个观察者,它会自动更新以下 3 列 created_by:当创建的记录“不再更新”时填充 修改_...
需要 Sized 的特征与无法拥有该特征的特征对象有什么关系?
我有这个代码(游乐场): 特征 NodeLike:大小 {} fn 主() { 让 s: Box = 恐慌!(); } 哪个不编译: 错误[E0038]:特征 `NodeLike` 无法制作成
xUnit - 从 dotnet test CLI 执行时如何选择单个理论
假设我有一个测试: [理论] [内联数据(“一”)] [内联数据(“两个”)] 公共无效ShouldSelectSingleTheoryFromDotnetTest(字符串s) { 断言.True(true); } 我想要...
请原谅这里有大量的代码,但是最小的示例很难解释,我试图使其尽可能短。我正在尝试在通用类型上实现通用特征,并带有
我试图让工作成为一种依赖于多个层面的其他抽象特征的特征。我遇到了这个错误: 错误[E0391]:检查有效可见性时检测到循环 | 注意:...
我创建了一个用于教育目的的简单项目,所以我有一个主要功能和3个特征电池、显示和GSM以及它们的实现。我希望 main 函数位于文件 main.rs ...
我正在尝试在我的枚举上实现索引,以便我可以按照为自定义类型实现切片来获取它的切片(具有切片内部值的相同变体的枚举)。但因为我的枚举有
我有以下标记特征和一些定义: 特质 HasProperty {} 结构属性1; 结构属性2; struct WithProperty {} 我想实现以下目标... 我有以下标记特征和一些定义: trait HasProperty<P> {} struct Property1; struct Property2; struct WithProperty<P, Tail> {} 我想实现以下目标: fn check::<P, T>(token: T) where T: HasProperty<P> {} fn test() { let token1 = WithProperty<Property1, WithProperty<Property2, ()>>; let token2 = WithProperty<Property1, ()>; check::<Property1>(token1); // should compile check::<Property2>(token1); // should compile check::<Property1>(token2); // should compile check::<Property2>(token2); // should fail with "WithProperty<Property1, ()> does not implement HasProperty<Property2>" } 但是我不明白如何实现WithProperty的特质一致性。由于特征定义重叠,以下内容不起作用: impl<P, Tail> HasProperty<P> for WithProperty<P, Tail> {} impl<P, P2, Tail> HasProperty<P> for WithProperty<P2, Tail> where Tail: HasProperty<P> {} 我在 Yew 中发现以下内容解决了同样的问题,但我无法理解它是如何工作的:https://github.com/yewstack/yew/blob/master/packages/yew/src/html/component /properties.rs. 要理解yew解决方案,最好要求编译器转储宏扩展的 AST。这样您就可以准确地看到生成的结构和特征是什么。 我不知道这是否正是在yew中的工作原理,但类似的东西是有效的,也许一些丑陋的部分可以隐藏在宏中: use std::marker::PhantomData; trait HasProperty<P, How> {} struct Property1; struct Property2; struct WithProperty<P, Tail>(PhantomData<P>, Tail); fn with<P, Tail>(t: Tail) -> WithProperty<P, Tail> { WithProperty(PhantomData, t) } fn check<P, How>(token: &impl HasProperty<P, How>) {} struct Directly; impl<P, Tail> HasProperty<P, Directly> for WithProperty<P, Tail> {} struct Step<N>(N); impl<P, P2, Tail, N> HasProperty<P, Step<N>> for WithProperty<P2, Tail> where Tail: HasProperty<P, N> {} fn main() { let token1 = with::<Property1, _>(with::<Property2, _>(())); let token2 = with::<Property1, _>(()); check::<Property1, _>(&token1); // compiles check::<Property2, _>(&token1); // compiles check::<Property1, _>(&token2); // compiles // check::<Property2, _>(&token2); // fails with "the trait bound `(): HasProperty<Property2, _>` is not satisfied" } 这两个 HasProperty 实现并不重叠,因为它们是针对两个不同的 struct 实现的。 Step 是一个(类似链表的)包装器,指示该属性存在,并且发现 N 会进入 WithProperty 嵌套。 如果你写的是: with::<Property1, _>(with::<Property2, _>(with::<Property1, _>(()))) 然后 check 调用会抱怨多个可能的 impl。我不知道yew是否能更优雅地处理这个问题。
我想在 Rust 中定义一个特征,它有一个泛型类型参数 - 例如,在特征级别上的 BorrowedValue,以及一个生命周期参数,例如在其方法级别上的“a”。复杂的是...
我想访问我的 log::Log impl 实例以便访问特定字段,但是一旦我收到引用,我就无法将其向下转换为我的结构。 我尝试转换记录器引用...
我有一个对象特征,可以从某个索引提供字节。这些可能是文件、正在跟踪的进程、其他字节提供程序上的缓存等: 使用 std::结果::结果; 使用 std::io::Error ;
我编写了一个具有 Animal 特征和实现该特征的 struct Dog 的程序。它还有一个 AnimalHouse 结构体,将动物存储为特征对象 Box。 特质动物{ 芬...
可以在运行时扩展或使用不同的类吗? 例子: 假设我们有一个名为 Player 的模型(我们的 A 模型) 可以在运行时扩展或使用不同的类吗? 示例: 假设我们有一个 model 称为 Player(我们的 A 模型) <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Player extends Model{ } 我们还有另外 2 个型号(B 和 C 型号) <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; protected $connection= 'db_b'; class PlayerInfoB extends Model{ function getName(){ return $this->name; } } 我们的C型号 <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; protected $connection= 'db_c'; class PlayerInfoC extends Model{ function getName(){ return $this->name_g; } } 模型A (Player)如何在运行时根据配置或其他数据扩展Model B or C 为什么我需要这个。 我有 2 个或更多不同的表,这些表的列有不同的名称,例如: Table 1 - name Table 2 - name_g Table 3 - name_full 所以我需要一个可以随时调用的包装器getName(),而无需检查现在使用的表。 $player = Player::get(); echo $player->getName(); 如果有不清楚的地方,请评论,我会更新我的问题。 更新基于madalin-ivascu答案可以这样完成吗? class Player extends Model{ protected $model; public function __construct(){ $this->setModel(); parent::__construct(); } protected function setModel(){ $this->model = $this->column_model_name } function getAttributeName(){ return $this->model->getName(); } } 如果不使用 eval 或 dirty hacks,就不可能在运行时编写一个类。您必须重新考虑您的类设计,因为您不太可能需要通过良好的设计来做到这一点。 您可以做的是使用方法 setTable 和 on: 在运行时更改模型实例上的表和数据库连接 Player::on('db_b')->setTable('player_info_b')->find($id); 另一种方法(首选)是定义模型 PlayerInfoC 和 PlayerInfoB 来扩展您的 Player 模型,然后根据您的情况在需要时实例化类 B 或 C。 在您的代码中,您的脚本必须具有您检查的状态,以便知道何时使用正确的模型? 既然如此,为什么不在 get name 中使用参数呢? class Player extends Model{ function getName($field){ return isset($this->{$field}) ? $this->{$field} : null; } } 如果你经常这样做,那么使用魔法方法: class Player extends Model{ function __get($key){ return isset($this->{$field}) ? $this->{$field} : null; } } ... echo $myModelInstance->{$field}; http://php.net/manual/en/language.oop5.overloading.php#object.get 在 Laravel 中,当你通过集合方法拉回数据时,它无论如何都会执行这个神奇的方法,因为所有属性都存储在称为属性的嵌套对象中,因此 __set() 和 __get() 看起来像这样: function __get($key){ return isset($this->attributes->{$key}) ? $this->attributes->{$key} : null; } function __set($key, $value){ return $this->attributes->{$key} = $value; } 建议后者带有属性子集,这样可以防止数据与返回的数据库列名称与模型中已使用的名称发生冲突。 这样,您只需在创建的每个模型中将一个属性名称作为保留名称进行管理,而不必担心您使用的数百个 var 名称会覆盖模型或模型扩展中的另一个属性名称。 使用该模型值来调用函数 $player = Player::get(); echo Player::getName($player->id,'PlayerInfoC'); 在 Player 模型中您只需调用 public static function getName($id,$class) return $class::where('player_id',$id)->getName();//each class will have the function } ps:您需要进行一些验证来测试该名称是否存在 另一种选择是在模型之间创建关系 您可以在模型中使用与以下相同的启动方法来执行此操作: protected static function booted() { if (<--your condition-- >) { $traitInitializers[static::class][] = 'boot' . ExampleTrait::class; $traitInitializers[static::class][] = 'boot' . Organizations::class; } }