【发布时间】:2018-08-24 13:18:33
【问题描述】:
我正在用 Rust 制作一个 OOP 聊天客户端。模块 messages.rs 以结构体的形式创建和处理其他模块的消息:SimpleMessage 和 ComplexMessage 结构体:
//! # Messages
use time::SteadyTime;
/// Represents a simple text message
pub struct SimpleMessage<'a> {
pub user: ...
pub time: &'a SteadyTime<'a>,
pub content: &'a str,
}
/// Represents attachments, like text or multimedia files.
pub struct ComplexMessage<'a> {
pub user: ...
pub time: &'a SteadyTime<'a>,
//pub content: PENDING
}
impl<'a> SimpleMessage<'a> { }
impl<'a> ComplexMessage<'a> { }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn is_simple() {
assert_eq!(&self.instance_of(), SimpleMessage);
}
#[test]
fn is_complex() {
assert_eq!(&self.instance_of(), ComplexMessage);
}
}
我很难找到类似 Java 的函数,例如用于结构的 InstanceOf(),它可能会像这样工作:
&self.instance_of() -> str
这将用于在 GUI 中处理与 SimpleMessage 不同的 ComplexMessage,为 ComplexMessage 添加预览和下载按钮。
有什么想法吗?
【问题讨论】:
-
鉴于 Rust 的编译时间保证,你为什么需要这个?
-
请查看如何创建minimal reproducible example,然后查看edit 您的问题以包含它。我们无法判断代码中存在哪些类型、字段等,也无法了解为什么您要实现此目标或哪些代码需要它。尝试在Rust Playground 上重现您的错误,或者您可以在全新的 Cargo 项目中重现它。还有Rust-specific MCVE tips。
-
也许How to match trait implementors 会有所帮助
-
你知道using
instanceofin Java is not a good idea吗?将糟糕的设计从一种语言复制到另一种语言通常不被鼓励。 -
很难写出第一次的问题——我从你的个人资料中注意到你是一名 CS 学生,所以希望这个不请自来的建议不会不受欢迎:我们的反馈为您提供的绝对不限于 Stack Overflow。它将与您整个职业生涯的每个部分相关。将问题简化为基本要素(“创建 MCVE”)、评估为什么你在做某事、花时间格式化和构建你的沟通等等都是成功的关键(在编程和可能几乎所有东西)。
标签: oop object struct rust instanceof