traits 相关问题

在计算机编程中,特征是一组方法,用作“构建面向对象程序的简单概念模型”

如何在 Rust 中编写一个通用方法,它可以接受任何可以转换为另一个值的值?

我希望能够在通用函数中接收类似路径的值。我的想法是,我希望能够接收任何可以转换为 PathBuf 的内容,如下所示: fn 构建... 我希望能够在通用函数中接收类似路径的值。我的想法是我希望能够接收任何可以转换为 PathBuf 的东西,如下所示: fn build<P>(path: P) -> Some<Handler>{ let mut base_path = PathBuf::from(path); ... } 但是,当然,如果没有适当的特征,这是行不通的。然而,我无法弄清楚如何编写通用特征,表明我想要接受一个可以被另一种类型接受为 from 的值。像这样(这当然行不通): fn build<P>(path: P) -> Some<Handler> where P: PathBuf::from::<P> { let mut base_path = PathBuf::from(path); ... } 对于您想要“转换为任何内容”的情况,正确的特征是Into。 但是,接受路径的惯用特征是AsRef<Path>。 fn build<P>(path: &P) where P: AsRef<Path> 或更短的形式: fn build<P: AsRef<Path>>(path: &P) 或更短: fn build(path: &impl AsRef<Path>) 如果你的函数并不简单,你应该立即转向非泛型函数: fn build(path: &impl AsRef<Path>) { build_impl(path.as_ref()) } fn build_impl(path: &Path) { .... } 如果您需要 PathBuf,只需拨打 to_owned() 上的 Path即可。 作为参考,您可以使用与 Into 相同的技术,但没有参考: fn build(p: impl Into<PathBuf>) { build_impl(p.into()) } fn build_impl(p: PathBuf) {}

回答 1 投票 0

Rust 中泛型类型的泛型构造函数

TL;DR:我如何保证可以使用WhateverStruct::new() 构造任意结构? 这: 特质可构造{ fn new() -> 自身; } 结构体 Foo { 酒吧:u8 /* 不管它可能是什么

回答 1 投票 0

具体类型的泛型函数特化

在这个示例中,我试图制作一些颜色转换实用程序:我想保证实现 ColorSpace 特征的每种类型都可以轻松转换为任何其他此类类型。为了实现...

回答 1 投票 0

如何在 Laravel 中使用 return 来停止 Trait php 的执行

我有我特征的下一个代码。 特质 ObraTrait { 公共函数 custo(请求 $request) { $custo = array_sum($request->custo); 如果($custo!= 100.00){ 回来...

回答 1 投票 0

表示可以构造元组的类型的特征

我有以下代码,带有我的虚假 TupleConstructor 特征: 酒吧特质轴{ const MIN:自身; const MAX:自身; } pub 特征 AxisU64:TupleConstructor {} 暗示 我有以下代码,带有我的假TupleConstructor特征: pub trait Axis { const MIN: Self; const MAX: Self; } pub trait AxisU64: TupleConstructor<u64> {} impl<T: AxisU64> Axis for T { const MIN = Self(u64::MIN); const MAX = Self(u64::MAX); } pub struct XAxis(u64); impl AxisU64 for XAxis {} pub struct YAxis(u64); impl AxisU64 for YAxis {} 本质上,我希望每个实现 Axis 特征的对象都有常量,但我不知道是否有这样的语法。所有这些信息都应该在编译时通过泛型实例化可用。 另一种方法是使用 from 或 into,但这不是 const fn,我无法使它们成为常量。 没有办法从类型中通用地获取元组结构的构造函数。由于是元组结构,元组结构不会获得任何特征,例如特征实现。 (此外,即使存在 TupleConstructor 特征,您也无法使用它来定义常量,因为无法从 const 求值中调用特征函数。) 但是,您可以编写一个派生宏(可能需要 macro_rules_attribute 的帮助,因为它是一个简单的模式)来生成具有两个常量的 Axis 实现。

回答 1 投票 0

dyn Trait 是引用类型吗?

在 Rust 中,引用实际上是一个原始指针,对其使用方式有限制,就像 C++ 中的引用一样。 类型 T = i64; 让我的变量:&T; 在 C++ 中,与原始指针不同,引用...

回答 1 投票 0

pub Trait Any:'静态,什么是静态?这是一种特质吗?

我目前正在阅读 std::any::Any 的 Rust 实现的代码。 这是特征的声明。 酒吧特质任何:'静态 如果我的理解是正确的,这定义了一个特质 Any which

回答 1 投票 0

为什么不可变特征的实现可以是可变的?

这是我的代码,可以编译 特征 AppendBar { fn append_bar(self) -> 自我; } impl AppendBar for Vec { fn append_bar(mut self) -> 自我 { self.push("酒吧&...

回答 1 投票 0

Rust 中的向上动态特性

我在 Rust 中面临以下情况: 特征 BaseTrait { fn do_base_stuff(&self) -> 字符串; } 特征 GenericChildTrait: BaseTrait {} 特征 DynamicChildTrait: BaseTrait {} 枚举

回答 0 投票 0

我什么时候应该在 rust 中使用 trait 作为类型?

我最近开始学习 Rust 并正在观看有关特征的视频,我了解到如果动态调度,特征也是有效类型。将具有特征的变量作为……有什么意义

回答 1 投票 0

trait函数中&self参数是必须的吗?

看这个示例代码 特质动物{ fn make_sound(&self); } 结构狗; 狗的 impl 动物 { fn make_sound(&self) { println!("汪!"); } } 结构猫; ...

回答 1 投票 0

Rust: &self参数在trait的函数中是必须的吗?

看这个示例代码 特质动物{ fn make_sound(&self); } 结构狗; 狗的 impl 动物 { fn make_sound(&self) { println!("汪!"); } } 结构猫; ...

回答 1 投票 0

如何为必须可序列化的特征添加特征边界

我无法使用以下代码(游乐场:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=4379c2006dcf3d32f59b0e44626ca667)。 使用 serde::{序列化,

回答 1 投票 0

方法存在,但不满足特征[关闭]

我正在实现一个非常通用的命令模式,作为 Rust 中泛型和特征的练习,但我遇到了无法逾越的墙。 我有这个结构: 发布结构 CommandProcessor<'a, TComman...

回答 0 投票 0

不同 crate 之间的序列化和反序列化

我有两个模块 crate_old 和 crate_new: /* [依赖项] serde = { version = "1", features = ["derive"] } serde_json = "1" 类型标签 = "*" */ pub mod cra ...

回答 0 投票 0

你如何推导特征门特征?

假设你有一个这样的枚举: #[派生(调试,克隆,复制,PartialEq)] 发布枚举 MyEnum { 一, 二, 三, 四、 } 但是你只想推导,比方说 PartialEq,如果某个

回答 1 投票 0

如何忽略 `#[derive(Debug)]` 的泛型参数?

这是一个代表我遇到的问题类型的最小示例。 使用 core::fmt::Debug; 发布特征配置{ A型:调试; } #[推导(调试)] 发布结构信息 { 酒吧

回答 2 投票 0

闭包如何根据它们需要实现的特征来推断它们的类型?

我正在编写一个接受不同特征实现者的函数。其中之一是闭包。有些闭包需要参数类型注释,有些则不需要,具体取决于它们的主体。 示例(播放...

回答 1 投票 0

哪些特征通过 `Deref`,哪些不通过?

假设我有一个新类型 发布结构 A(Vec); 假设我在其上实现 Deref 以访问内部向量。令我惊讶的是,这使我能够对 A 类型的对象进行索引,并且它...

回答 2 投票 0

如何在 Rust 中定义指向特征函数的指针

假设我有以下代码: 特性 Saluter { fn 你好(&self); 再见(&self); } 结构 A {} 结构 B {} 为 A { 实施 Saluter fn 你好(&自我){ println!("...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.