返回顶部
首页 > 资讯 > 精选 >怎么使用Rust语言的类型转换
  • 452
分享到

怎么使用Rust语言的类型转换

2023-06-16 09:06:56 452人浏览 安东尼
摘要

本篇内容介绍了“怎么使用Rust语言的类型转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是类型转换?类型转换,是调用函数时,根据函数

本篇内容介绍了“怎么使用Rust语言的类型转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

什么是类型转换?

类型转换,是调用函数时,根据函数要求的参数签名类型A,将我们手中的类型B转换为类型A的过程,而且不能改变B的所有权。一般的函数调用都要求我们传递引用,很少需要直接传递所有权的。

很多语言提供了向上转型和向下转型,例如Java和c++等,如此使用(B)A,即可将B强制转换成A。但是强转是有一定的风险的,Java里强转失败会抛出CastException,而在C++里有时候不抛异常,必须使用更高版本的cast系列函数去转换,才可以保证转换失败时给出异常,避免产生内存安全的问题。

Rust虽然是各种安全风险可控的编程语言,但是也有一些是需要开发人员事先了解的,比如整型之间强转的结果并不尽如人意。

as操作符

1、在编码过程中,使用最多的转换,要数整型的强制转换了。

我们往往会遇见这样的类型需求usize,这个类型一般代指长度或者数组索引,我们只有i32之类的整型变量是不能直接透传进去的,必须使用as关键字作强制转换后,才可以通过编译器的检测。

但是,这里会发生一些意想不到的事情,比如类型截断。

什么是类型截断,即一个值范围较大的变量A转换为值范围较小的变量B,如果超出范围,则将A减去B的区间长度。

例如,128超出了i8类型的范围(-128,127),强转之后的值等于128-256=-128。

2、在学习Trait的时候,我们发现一个问题,类型A可以实现很多Trait,有些Trait存在函数签名相同的情况,但是内部实现却不相同,如果使用A为主题去调用的话,编译器无法判断应该调用哪个函数,所以必须将A向上强转为特定的Trait,以告知编译器如何做出判断。

例如,B和C是有同名含函数name()的Trait,A分别实现了他们,当A想要调用B的name()的时候,需要显示转换,避免歧义,如::name()。

3、as还可以在父类型与子类型之间相互转换,比如&’static str和&'a  str。'static生命周期是整个进程存活期间有效的,而'a的生命周期较短,我们称&'static是&'a的子类型,使用'static:'a来表示。as可以将父子类型自由转换,如&'static  str as &'a str,这种做法的意义是为了满足某些函数对生命周期的要求。

From和Into

这2个Trait定义在标准库的convert模块中,其实他们做的是同一件事情,不要被From和Into绕晕掉。

举个形象的比喻,我吃饭,和饭被我吃,是一回事。只要我在吃饭,那么饭肯定正在被我吃,是一个道理。

Rust还为此定义了一个定理:如果类型A实现了From,则B类型实例调用into方法就可以转换为类型A。

例如,我们常见的字符串String类型实现了From(&str),那么&str就可以into()为String。

大多数情况下,我们只需要实现From这个Trait即可,Rust为所有实现From的自动实现了反方向的Into。

怎么使用Rust语言的类型转换

From和Into也不是完全没有异常发生的,当我们不确定转换的结果是我们想要的时候,可以实现TryFrom和TryInto这两个Trait,以捕获可能发生的错误信息。

AsRef和AsMut

AsRef和AsMut可以将类型分别转换为不可变引用和可变引用。这两个Trait对我们实现可扩展的函数是非常有帮助的。

比如,我们想设计一个允许传入&String和&str都可以的函数,那么像下图中的test函数那样做:

怎么使用Rust语言的类型转换

如果我们自己定义一个类型,最好能实现AsRef这个Trait,它会给我们带来很多意想不到的实惠。

FromStr

Rust内置了很多帮助我们类型转换的实现,字符串和其他类型之间的转换,都会默认实现FromStr这个Trait。

如果想把一个字符串转换为整型,可以使用parse函数,它会根据返回值类型自动解析字符串,以得到正确类型的返回值。

整型转换为字符串,就不用多说了,直接fORMat宏格式化即可。

怎么使用Rust语言的类型转换

“怎么使用Rust语言的类型转换”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么使用Rust语言的类型转换

本文链接: https://lsjlt.com/news/282965.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用Rust语言的类型转换
    本篇内容介绍了“怎么使用Rust语言的类型转换”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是类型转换类型转换,是调用函数时,根据函数要...
    99+
    2023-06-16
  • c语言类型转换怎么做
    c语言中的类型转换可将一种数据类型的值转换为另一种,隐式转换由编译器自动执行,显式转换由程序员通过强制转换符手动指定。隐式转换自动将低精度值转换为高精度值,而显式转换则需要考虑数据丢失、...
    99+
    2024-04-13
    c语言 数据丢失 隐式类型转换 隐式转换
  • 不同语言中类型转换与Go语言类型转换的差异
    go 语言类型转换与其他语言存在差异:go 语言强制类型安全,其他语言允许隐式转换;go 语言内置转换不导致数据丢失,而其他语言的强制转换可能导致;go 语言使用 t(v) 语法进行显式...
    99+
    2024-04-12
    go 类型转换 python go语言 c++ 数据丢失 隐式转换
  • c语言中类型转换怎么弄
    c 语言中存在两种类型转换:隐式转换(类型提升):当需要将较小的数据类型转换为较大的数据类型时自动发生。显式转换(强制类型转换):用于将较大的数据类型转换为较小的数据类型,通过在变量或表...
    99+
    2024-04-13
    c语言 隐式转换
  • c语言怎么进行类型转换
    c 语言提供了两种类型转换:隐式转换(自动)和显式转换(手动)。显式转换方法包括强制类型转换运算符 (type)、sprintf()/sscanf() 函数、atoi()/atof() ...
    99+
    2024-04-13
    c语言 数据丢失 隐式转换
  • C语言类型转换的作用是什么及怎么使用
    这篇“C语言类型转换的作用是什么及怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言类型转换的作用是什么及怎么使用...
    99+
    2023-06-30
  • 如何使用C语言数据类型转换
    这篇文章主要介绍“如何使用C语言数据类型转换”,在日常操作中,相信很多人在如何使用C语言数据类型转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用C语言数据类型转换”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-15
  • c语言怎么进行强制类型转换
    这篇文章主要讲解了“c语言怎么进行强制类型转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言怎么进行强制类型转换”吧!在c语言中,可以通过“(type_name) expression...
    99+
    2023-07-04
  • go语言怎么进行强制类型转换
    go语言中的强制类型转换有三种语法形式:1、类型断言,语法“value, ok := x.(需要转换的类型)”;2、使用“type (a)”形式进行的类型转换,语法“类型B的值 = 类型B(类型A的值)”;3、指针类型转换,语法“(*指针类...
    99+
    2023-05-14
    go语言 Golang
  • C语言隐式类型转换与强制类型转换的方法是什么
    本篇内容主要讲解“C语言隐式类型转换与强制类型转换的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言隐式类型转换与强制类型转换的方法是什么”吧!类型转换数据有不同的类型,不同类型数...
    99+
    2023-06-25
  • Golang 语言极简类型转换库cast的使用详解
    目录01 介绍02 转换为字符串类型03 总结01 介绍 在 Golang 语言项目开发中,因为 Golang 语言是强类型,所以经常会使用到类型转换。本文我们介绍类型转换三方库 -...
    99+
    2024-04-02
  • C语言简明讲解类型转换的使用与作用
    目录一、类型之间的转换二、强制类型转换三、隐式类型转换四、表达式中的隐式类型转换五、小结一、类型之间的转换 C语言中的数据类型可以进行转换 强制类型转换隐式类型转换 二、强制类型转...
    99+
    2024-04-02
  • Go语言中整数类型之间怎么转换
    这篇“Go语言中整数类型之间怎么转换”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言中整数类型之间怎么转换”文章吧。G...
    99+
    2023-07-05
  • r语言中怎么进行数据类型转换
    在R语言中,可以使用以下函数来进行数据类型转换: 使用as.numeric()函数将数据转换为数值型: x <- &quo...
    99+
    2024-03-02
    r语言
  • Go语言中的数据类型有哪些及类型间怎么转换
    这篇“Go语言中的数据类型有哪些及类型间怎么转换”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言中的数据类型有哪些及类...
    99+
    2023-06-30
  • golang 如何使用类型断言进行类型转换
    go 中类型断言用于将接口值转换为更具体的类型。它包含以下步骤:声明接口值和目标类型。使用类型断言语法将接口值转换为目标类型,并将结果赋值给变量。使用布尔变量检查转换是否成功。如果转换失...
    99+
    2024-05-01
    类型转换 类型断言 golang
  • 详解Go语言中的数据类型及类型转换
    目录1、基本数据类型2、基础数据类型转换3、基本数据类型转为字符串4、strconv的使用5、字符串转为基础类型1、基本数据类型 数据类型有很多,先研究一下基础的,例如:布尔型、数字...
    99+
    2024-04-02
  • 详解C语言基础的类型转换
    目录类型转换隐式类型转换强制类型转换总结 类型转换 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。转换包括隐式类型转换和强制类型转换。 类型转换的原则:...
    99+
    2024-04-02
  • go语言的数据类型转换教程
    Go语言中,数据类型转换通常使用强制类型转换”类型断言“进行,常见的数据类型转换方法如下:1、将一个整型数值转换为另一个整型数值时,可以使用强制类型转换;2、浮点型数值转换为另一个浮点型数值时,也可以使用强制类型转换;3、字符串转换为另一个...
    99+
    2023-12-18
    go语言数据类型转换 go语言 Golang
  • go语言如何进行类型转换
    这篇文章给大家分享的是有关go语言如何进行类型转换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在go语言中,类型转换用于将一种数据类型的变量转换为另外一种类型的变量,语法为“type_name(expressi...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作