织梦怎么用框架实现在浏览器的地址栏只显示网站的域名而不显示出文件名企业网站策划过程

pingmian/2026/1/23 23:47:50/文章来源:
织梦怎么用框架实现在浏览器的地址栏只显示网站的域名而不显示出文件名,企业网站策划过程,app网站开发后台处理,加盟网站建设的内容不同于 java 中的反射#xff0c;Rust 没有提供以往意义上的运行时反射#xff0c;取而代之的是 “编译期反射”#xff0c;如 类型分析、类型转换、类型签名。但即便如此#xff0c;也已经能对 Rust元编程 提供很多助力了。 这种操作#xff0c;主要通过 Any 来实现…  不同于 java 中的反射Rust 没有提供以往意义上的运行时反射取而代之的是 “编译期反射”如 类型分析、类型转换、类型签名。但即便如此也已经能对 Rust元编程 提供很多助力了。 这种操作主要通过 Any 来实现Rust 中提供了 Any Trait所有类型含自定义类型都自动实现了该特征因此通过它我们可以进行一些类似反射的功能 实际上在 Rust 早期版本中是提供了 Reflection 的但是在 14年移除了相关代码原因是 反射打破了原有的封装原则能任意访问结构体内容不安全反射的存在使得代码过于臃肿移除后编译器可以简化很多反射功能设计的比较弱开发者对于是否在未来的版本中还拥有反射功能存疑 另一篇 关于Rust为何不引入 Runtime Reflection 大致信息如下 不一定非要使用反射来实现 Rust中可以有更好的实现派生宏和Trait之间的配合可以将实现从运行时转移到编译时 例如利用过程宏实现编译时反射以实现依赖注入等功能 - https://github.com/dtolnay/reflect 至于保留 Any 的原因 在调试范型类型相关代码时有TypeId会更方便更容易给出正确的错误提示有利于编译器作出代码的优化 Any源码简读 参看Any源码文档 作为 dyn Any (借用的 trait 对象)具有 is 和 downcast_ref 方法可测试值是否为给定类型并对类型的内部值进行引用作为 mut dyn Any还有 downcast_mut 方法用于获取内部值的 “可变引用” Boxdyn Any 具有 downcast 方法该方法尝试转换为 BoxT也有称 “类型具象化”。但需注意dyn Any 仅限于测试值是否为具体的类型而不能用于测试类型是否实现了 Trait 总结就是 std::any 起到的作用有4个 获得变量的类型 a.type_id()判断变量是否是指定的具体类型 a.is::String() 或 TypeId::of::String() a.type_id()把any转换成指定类型 a.downcast_ref::String()获取类型的名字 (_: T) - String { std::any::type_name::T().to_string() } 下面看一段 Any Trait 部分核心源码可帮助更好理解 Any pub trait Any: static {fn type_id(self) - TypeId; }// 获得变量的类型TypeId // 为所有的T实现了Any #[stable(feature rust1, since 1.0.0)] implT: static ?Sized Any for T {fn type_id(self) - TypeId { TypeId::of::T() } }// 判断变量是否是指定类型 #[stable(feature rust1, since 1.0.0)] #[inline] pub fn isT: Any(self) - bool {// Get TypeId of the type this function is instantiated with.let t TypeId::of::T();// Get TypeId of the type in the trait object.let concrete self.type_id();// Compare both TypeIds on equality.t concrete }// 把any转换成指定类型 #[stable(feature rust1, since 1.0.0)] #[inline] pub fn downcast_refT: Any(self) - OptionT {if self.is::T() {// SAFETY: just checked whether we are pointing to the correct typeunsafe {Some(*(self as *const dyn Any as *const T))}} else {None} }// 获取类型名字 pub const fn type_nameT: ?Sized() - static str {intrinsics::type_name::T() }#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)] pub struct TypeId {t: u64, }补充说明 Rust 中所有拥有静态生命周期的类型都会实现Any未来可能会考虑加入生命周期是非‘static的情况 Rust 中所有类型都有一个全局唯一的标识 TypeIdA TypeId represents a globally unique identifier for a type 这些 TypeId 都是通过调用 intrinsic 模块中定义的函数创建的即 TypeId 的生成是由编译器的实现来决定的 关于intrinsic 模块 intrinsic 库函数是指由编译器内置实现的函数一般是具有如下特点的函数 与CPU架构相关性很大必须利用汇编实现或者利用汇编才能具备最高性能的函数和编译器密切相关的函数由编译器来实现最为合适具体实现 - https://github.com/rust-lang/rust/blob/master/compiler/rustc_codegen_llvm/src/intrinsic.rs Any基本使用 examples/main.rs use std::any::{Any, TypeId};struct Person {pub name: String, }/// 判断是否为指定类型-1 fn is_string(s: dyn Any) - bool {TypeId::of::String() s.type_id() // 获取TypeId }/// 判断是否为指定类型-2 fn check_string(s: dyn Any) {if s.is::String() {println!(Its a string!);} else {println!(Not a string...);} }/// 转换Any为特定类型 fn print_if_string(s: dyn Any) {if let Some(ss) s.downcast_ref::String() {println!(Its a string({}): {}, ss.len(), ss);} else {println!(Not a string...);} }/// 获取类型的名字 /// 但需注意, 此方式获取的名字不唯一 /// 如 type_name::OptionString 可能返回 OptionString 或 std::option::Optionstd::string::String /// 同时, 编译器版本不同、可能返回值不同 fn get_type_nameT(_: T) - String {std::any::type_name::T().to_string() }fn main() {let p Person { name: John.to_string() };assert!(!is_string(p));assert!(is_string(p.name));check_string(p);check_string(p.name);print_if_string(p);print_if_string(p.name);println!(Type name of p: {}, get_type_name(p));println!(Type name of p.name: {}, get_type_name(p.name)); }输出如下 Not a string... Its a string! Not a string... Its a string(4): John Type name of p: 0_any::Person Type name of p.name: alloc::string::StringAny适用场景 Rust 中的 Any 类似于 Java 中的 Object可以传入任何拥有静态生命周期的类型因此当入参类型复杂但后续又没有更多功能性操作时就可以简化入参。例如打印任何类型的值。 examples/1_print_any.rs use std::any::Any; use std::fmt::Debug;#[derive(Debug)] struct MyType {name: String,age: u32, }fn print_anyT: Any Debug(value: T) {let value_any value as dyn Any;if let Some(string) value_any.downcast_ref::String() {println!(String ({}): {}, string.len(), string);} else if let Some(MyType { name, age }) value_any.downcast_ref::MyType() {println!(MyType ({}, {}), name, age)} else {println!({:?}, value)} }fn main() {let ty MyType {name: Rust.to_string(),age: 30,};let name String::from(Rust);print_any(ty);print_any(name);print_any(30); }运行后输出 MyType (Rust, 30) String (4): Rust 30如上所示不论 String、MyType 自定义类型、还是内置的 i32 类型都可以被打印只要他们实现了 Debug Trait这也可以认为是Rust 中、一种函数重载的方式在读取一些结构复杂的配置时也可以直接使用 Any。 最后总结 Any Trait 并非常规意义上的 Reflection而最多是编译期反射、且只启用了 “类型检查” 和 “类型转换”并不检查结构的任意内容。 Any 符合零成本抽象因为Rust只会针对调用该函数的相关类型生成代码并且返回的是编译器内部的类型ID没有额外开销甚至可以直接使用 TypeId::of::String从而没有了 dyn any 的动态绑定开销。 虽然 Rust 没有真正的 运行时 Reflection但使用过程宏、仍可以实现大部分反射能够实现的功能如上一节的 AOP 增强 就这样bye bye 参考资料 https://www.jianshu.com/p/c4ef17bb1ca3https://rust.ffactory.org/std/any/index.htmlhttps://jasonkayzk.github.io/2022/11/24/Rust%E5%8F%8D%E5%B0%84%E4%B9%8BAny/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设设计企业西安网站优化效果

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、内省是什么、实现方式: 内省(Introspector)是Java语言对Bean类属性、事件的一种缺省处理方法。…

永久免费个人网站注册厦门网站建设模拟平台

近日,全球领先的物联网整体解决方案供应商移远通信宣布,其旗下符合3GPP R17标准的新一代5G-A模组RG650V-NA成功通过了北美两家重要运营商认证。凭借高速度、大容量、低延迟、高可靠等优势,该模组可满足CPE、家庭/企业网关、移动热点、高清视频…

有口碑的宁波网站建设信息流优化师招聘

确保代码完整性 在撸业务代码时候,经常面对的是接口的设计,在设计之初,我们必然要先想好入参,之后自然会有参数的校验过程,此时我们需要把可能的输入都想清楚,从而避免在程序中出现各种纰漏。但是难免面面…

商丘网站制作推广网站建设是指

通过上一篇文章的介绍,我们已经了解到了在CorelDRAW中如何自定义设置默认字体,相关阅读可参阅:CDR X8设置文字为默认字体。其实在CorelDRAW软件中给用户提供方式不止是一种,本文将介绍更多关于设置默认字体的方法。1. 打开CorelDR…

自己怎么用h5做网站国家信息公示系统

glibc提供了backtrace这个库函数,可以用来打印call stack。比如我们可以在程序中注册常见的一些signal,比如SIGSEGMENT, SIGPIPE,然后在这些信号的回调函数中,利用backtrace打印出call stack,这样debug就非常的方便。 …

网站开发系统设计苏州网站制作计划

文章目录 生成随机值生成随机数生成范围内随机数生成自定义类型随机值从一组字母数字字符创建随机密码从一组用户定义字符创建随机密码 总结 生成随机值 rust中官方并没有像以他语言一样,rust并没有官方并没有提供生成随机数的工具,所以我们要借助rand包…

电子政务和网站建设工作的总结seo关键词优化平台

测量矩阵的基本概念 在压缩感知(Compressed Sensing,CS)理论中,测量矩阵(也称为采样矩阵)是实现信号压缩采样的关键工具。它是一个通常为非方阵的矩阵,用于将信号从高维空间映射到低维空间&…

企业网站网上推广的途径网站开发有哪些类型

一、 数据规范化 1.1 数据规范化的概念 定义 数据规范化是数据库设计中的一种方法,通过组织表结构,减少数据冗余,提高数据一致性和降低更新异常的过程。这一过程确保数据库中的数据结构遵循一定的标准和规范,使得数据存储更加高…

网站建设所用软件手机网页游戏排行榜2021前十名

总览 Exchanger类在线程之间传递工作和回收使用的对象方面非常有效。 AFAIK,它也是最少使用的并发类之一。 但是,如果您不需要GC,则使用ArrayBlockingQueue进行日志记录会更简单。 交换器类 Exchanger类对于在两个线程之间来回传递数据很有…

网站搭建南京微信平台商城开发

背景:润乾报表 win上面的项目直接上传到linux 上,但预览&下载报表时乱码如果含有斜线的单元格或统计图的报表在网页上发布时,统计图或斜线单元格里的汉字会变成小方框,此时往往是服务器端操作系统的中文安装包没有装全&#x…

如何做网站规范网站升级中

前言 在很多第一人称或者第三人称射击游戏的单人模式中,玩家的乐趣往往来源于和各式各样的AI敌人的战斗。而战斗的爆发很多时候是因为这些AI在“看见”玩家后就会立即做出反应,比如开火、呼叫同伴、躲藏或者逃跑等。 所以这些AI到底是如何探测&#xff0…

为什么做不了自己的网站y-m-d WordPress

AttributeError: ‘set’ object has no attribute ‘items’ 出现这个问题,原因可能是定义的header有问题 正确如下: header{“key”:“value”} 如果是直接在请求数据中复制,很有可能会忽略键和值的冒号。

电商的网站开发订单返利功能湖南外贸网站建设

文章目录一、前置准备1. 技术选型2. 创建vue项目二、Rem 布局适配2.1. px转rem2.2. 设置 rem 基准值2.3. 配置vue.config.js2.4. 重置样式表2.5. 配置样式表2.6. 安装less2.7. 注册less2.8. 代码中使用三、vant安装/配置/测试3.1. 安装vant-ui3.2. 引入与注册3.3. vant测试四、…

网站开发平面设计师岗位要求关键词推广和定向推广

简介: K8s 取其精华去其糟粕,是我们程序员应该做的事情。 K8s设计模式 Kubernetes是一个具有普遍意义的容器编排工具,它提供了一套基于容器构建分布式系统的基础依赖,其意义等同于Linux在操作系统中的地位,可以认为是…

创业网站怎么做域名注册哪个好

正常情况下是没有手机上画电子围栏的,公共平台上我也没找到,所以走了一个歪点子,就是给地图添加点击事件,记录点的位置,在画到电子围栏上就是添加电子围栏了,如果只是显示电子围栏就简单了 一、多边形电子…

购物网站开发所用技术台州网站建设方案咨询

数组结构赋值 let [a,b][1,2] //交换两个变量的值 let[a,b][b,a] //扩展运算符的运用 let[a,...b][1,2,3]  //有默认值 右侧的参数等于undefined,默认值生效 let[a3,b][1,2] 对象结构赋值 let {a:a,b:b}{a:1,b:2};let {a,b}{a:1,b:2}let{a,...b}{a:1,b:2,c:3}

行政审批网站建设规范软件开发3000人天报价标准

这三点是webpack优化策略的一部分,具体解释如下: 优化正则匹配(Test):在webpack的配置中,test属性是一个正则表达式,用于匹配需要应用该loader的文件的扩展名。在您提供的代码中,te…

网站制作学校要的相城区公司网站建设

0:前言 🪧 什么情况需要数据库? 1 大规模的数据需要处理(比如上千上万的数据量)2 需要把数据信息存储起来,无论是本地还是服务上,而不是断电后数据信息就消失了。 如果不是上面的原因化,一般…

做网站会遇到哪些问题宁波网站建设i sp.net

通过编程实现PDF转PPT的功能,可以自动化转换过程,减少手动操作的工作量,并根据需要进行批量转换。将PDF文件转换为PPT文档后,可以利用PPT的丰富功能和动画效果,达到更好的演示效果。 在Java中,我们可以使用…

网站后端技术有哪些网站开发设计怎么找客户

Netty的ChannelFuture在Netty中的所有的I/O操作都是异步执行的,这就意味着任何一个I/O操作会立刻返回,不保证在调用结束的时候操作会执行完成。因此,会返回一个ChannelFuture的实例,通过这个实例可以获取当前I/O操作的状态。Chann…