仓颉编程语言:类型转换

仓颉编程语言开发:整数类型 整数类型分为有符号(signed)整数类型和无符号(unsigned)整数类型。 阅读详情

仓颉不支持不同类型之间的隐式转换(子类型天然是父类型,所以子类型到父类型的转换不是隐式类型转换),类型转换必须显式地进行。下面将依次介绍数值类型之间的转换,Rune 到 UInt32 和整数类型到 Rune 的转换,以及 is 和 as 操作符。

数值类型之间的转换

对于数值类型(包括:Int8,Int16,Int32,Int64,IntNative,UInt8,UInt16,UInt32,UInt64,UIntNative,Float16,Float32,Float64),仓颉支持使用 T(e) 的方式得到一个值等于 e,类型为 T 的值。其中,表达式 e 的类型和 T 可以是上述任意数值类型。

下面的例子展示了数值类型之间的类型转换:

main() {
    let a: Int8 = 10
    let b: Int16 = 20
    let r1 = Int16(a)
    println("The type of r1 is 'Int16', and r1 = ${r1}")
    let r2 = Int8(b)
    println("The type of r2 is 'Int8', and r2 = ${r2}")

    let c: Float32 = 1.0
    let d: Float64 = 1.123456789
    let r3 = Float64(c)
    println("The type of r3 is 'Float64', and r3 = ${r3}")
    let r4 = Float32(d)
    println("The type of r4 is 'Float32', and r4 = ${r4}")

    let e: Int64 = 1024
    let f: Float64 = 1024.1024
    let r5 = Float64(e)
    println("The type of r5 is 'Float64', and r5 = ${r5}")
    let r6 = Int64(f)
    println("The type of r6 is 'Int64', and r6 = ${r6}")
}

上述代码的执行结果为:

The type of r1 is 'Int16', and r1 = 10
The type of r2 is 'Int8', and r2 = 20
The type of r3 is 'Float64', and r3 = 1.000000
The type of r4 is 'Float32', and r4 = 1.123457
The type of r5 is 'Float64', and r5 = 1024.000000
The type of r6 is 'Int64', and r6 = 1024

Rune 到 UInt32 和整数类型到 Rune 的转换

Rune 到 UInt32 的转换使用 UInt32(e) 的方式,其中 e 是一个 Rune 类型的表达式,UInt32(e) 的结果是 e 的 Unicode scalar value 对应的 UInt32 类型的整数值。

整数类型到 Rune 的转换使用 Rune(num) 的方式,其中 num 的类型可以是任意的整数类型,且仅当 num 的值落在 [0x0000, 0xD7FF] 或 [0xE000, 0x10FFFF] (即 Unicode scalar value)中时,返回对应的 Unicode scalar value 表示的字符,否则,编译报错(编译时可确定 num 的值)或运行时抛异常。

下面的例子展示了 Rune 和 UInt32 之间的类型转换:

main() {
    let x: Rune = 'a'
    let y: UInt32 = 65
    let r1 = UInt32(x)
    let r2 = Rune(y)
    println("The type of r1 is 'UInt32', and r1 = ${r1}")
    println("The type of r2 is 'Rune', and r2 = ${r2}")
}

上述代码的执行结果为:

The type of r1 is 'UInt32', and r1 = 97
The type of r2 is 'Rune', and r2 = A

is 和 as 操作符

仓颉支持使用 is 操作符来判断某个表达式的类型是否是指定的类型(或其子类型)。具体而言,对于表达式 e is T(e 可以是任意表达式,T 可以是任何类型),当 e 的运行时类型是 T 的子类型时,e is T 的值为 true,否则 e is T 的值为 false。

下面的例子展示了 is 操作符的使用:

open class Base {
    var name: String = "Alice"
}
class Derived <: Base {
    var age: UInt8 = 18
}

main() {
    let a = 1 is Int64
    println("Is the type of 1 'Int64'? ${a}")
    let b = 1 is String
    println("Is the type of 1 'String'? ${b}")

    let b1: Base = Base()
    let b2: Base = Derived()
    var x = b1 is Base
    println("Is the type of b1 'Base'? ${x}")
    x = b1 is Derived
    println("Is the type of b1 'Derived'? ${x}")
    x = b2 is Base
    println("Is the type of b2 'Base'? ${x}")
    x = b2 is Derived
    println("Is the type of b2 'Derived'? ${x}")
}

上述代码的执行结果为:

Is the type of 1 'Int64'? true
Is the type of 1 'String'? false
Is the type of b1 'Base'? true
Is the type of b1 'Derived'? false
Is the type of b2 'Base'? true
Is the type of b2 'Derived'? true

as 操作符可以用于将某个表达式的类型转换为指定的类型。因为类型转换有可能会失败,所以 as 操作返回的是一个 Option 类型。具体而言,对于表达式 e as T(e 可以是任意表达式,T 可以是任何类型),当 e 的运行时类型是 T 的子类型时,e as T 的值为 Option<T>.Some(e),否则 e as T 的值为 Option<T>.None。

下面的例子展示了 as 操作符的使用(注释中标明了 as 操作的结果):

open class Base {
    var name: String = "Alice"
}
class Derived <: Base {
    var age: UInt8 = 18
}

let a = 1 as Int64     // a = Option<Int64>.Some(1)
let b = 1 as String    // b = Option<String>.None

let b1: Base = Base()
let b2: Base = Derived()
let d: Derived = Derived()
let r1 = b1 as Base    // r1 = Option<Base>.Some(b1)
let r2 = b1 as Derived // r2 = Option<Derived>.None
let r3 = b2 as Base    // r3 = Option<Base>.Some(b2)
let r4 = b2 as Derived // r4 = Option<Derived>.Some(b2)
let r5 = d as Base     // r5 = Option<Base>.Some(d)
let r6 = d as Derived  // r6 = Option<Derived>.Some(d)

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing ,不定期分享原创知识。

国产自研编程语言“仓颉”来了! 在探索仓颉编程语言的旅程中,我们领略了其独特的设计理念、强大的功能和无尽的潜力。从基础的数据类型到复杂的算法结构,仓颉语言展现了一种既注重效率又追求简洁与优雅的编程范式。其枚举类型作为语言中的一个重要组成部分,不仅增强了代码的可读性和类型安全性,还为开发者提供了更多的灵活性和便利性。然而,仓颉语言仍然是一个不断发展的领域,它将继续吸引来自全球各地的开发者们共同探索和创新。我们期待着未来仓颉语言能够带来更多的惊喜和突破,为解决现实世界中的复杂问题提供更加高效和可靠的编程工具。 阅读详情

相关推荐

仓颉语言的属性和子类型关系详解【属性、子类型关系、类型转换】

属性可以在interfaceclassstructenum和extend中定义。set(v) {}在这个例子中,a是一个只读属性,而b是一个可读可写的属性。属性的getter和setter分别对应两个不同的函数。在仓颉语言中,属性可以在classinterfacestructenum和extend中定义。set(v) {}上面的代码中,我们定义了两个属性a和b,它们的类型都是Int64。属性a只有 getter 方法,因此它是只读的;属性b。

一键难忘的博客 2773

仓颉编程语言开发:字符串类型

字符串类型使用 String 表示,用于表达文本数据,由一串 Unicode 字符组合而成。

xiaoxiaoxinQAQ的博客 1593

仓颉编程语言技术深度解析-入门到高手【好书推荐】

在面向对象编程的内容中,介绍了类的定义和创建对象的方法,详细讲解了面向对象编程的三大特征:封装、继承和多态。同时,仓颉社区也为开发者提供了丰富的资源和良好的社区环境,进一步推动了仓颉语言的发展和应用。例如,北京理工大学以“30+30”两个特班为基础,深度协同校企资源,将仓颉语言融入专业课堂和教材,构建课题方向、课程教学、实践实训合一的教学实践体系。仓颉语言可以很好地应对目前的变化,在《图解仓颉编程:高级篇》这本书中,就以全彩风格、丰富的图表展示仓颉的高级特性。在他们的倾力分享下,小白也能轻松学会仓颉编程。

一键难忘的博客 5349

仓颉语言中的子类型关系与类型转换机制

《仓颉语言类型系统解析》摘要(150字): 仓颉语言构建了严谨的类型系统,核心基于子类型关系实现类型安全。系统通过继承/接口实现建立基本子类型,元组协变与函数型变(参数逆变、返回协变)确保复合类型安全。泛型采用不变性规则,内建类型保留特殊型变。显式转换机制(is/as操作符)和严格的C互操作类型映射保障运行时安全。高级特性包括This类型、单继承限制等,整体在静态安全与灵活性间取得平衡,特别适合系统级开发。开发者需重点掌握子类型规则、泛型不变性及显式转换规范。

Huang兄 702

仓颉码转换

一个将汉字转换仓颉码的使用小工具,繁体和简体都可以转换!

仓颉输入法

中国台湾使用的输入法, 日常电脑上使用非常方便。

HarmonyOS NEXT下一代编程语言仓颉介绍及入门

仓颉 | 华为开发者联盟随着万物互联以及智能时代的到来,软件的形态将发生巨大的变化。一方面,移动应用和移动互联网领域仍然强力驱动人机交互、设备协同、智能化、安全性等方向的创新,另一方面人工智能也同样驱动软件朝智能化、端边云协同等方向演进。新技术、新场景下应用软件的开发对编程语言提出了新的诉求和挑战。仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 1万+

【阿里云大模型高级工程师ACP习题集】2.3 优化提示词改善答疑机器人回答质量

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 1633

仓颉编程语言来了-仓颉编程语言白皮书

卓越性能:仓颉编译器及运行时从全栈对编译进行优化,包括编译器前端基于CHIR(Cangjie HighLevel IR)高层编译优化(比如语义感知的循环优化、语义感知的后端协同优化等),基于后端的编译优化(比如:SLP向量化、Intrinsic优化、InlineCache、过程间指针优化、Barrier优化等),基于运行时的优化(比如轻量锁、分布式标记、并发Tracing优化等),一系列的优化让仓颉充分发挥处理器能力,为应用提供卓越的性能支持。此外,仓颉还支持类型推断,能够降低开发者类型标注的负担;

Neo的博客 4338

yolov7模型部署流程

yolov7部署流程

算法的猫 1397

火山引擎实时对话AI实战:5分钟搞定WebRTC+大模型+ASR/TTS全链路集成

本文详细介绍了如何利用火山引擎的实时对话AI解决方案,快速集成WebRTC、大模型、ASR和TTS服务,构建低延迟、高保真的实时语音对话应用。通过实战代码示例,从环境准备、音频流管理到全链路串联与性能优化,为开发者提供了一套端到端的集成指南,适用于智能客服、在线教育等互动场景。

weixin_29051245的博客 1132

仓颉编程语言:仓颉-C 互操作

为了兼容已有的生态,仓颉支持调用 C 语言的函数,也支持 C 语言调用仓颉的函数。

Androidbye的博客 1229

Jenkins中文显示不全?三步搞定Locale插件+汉化包的正确安装姿势

本文针对Jenkins界面中文显示不全问题,提供从原理到实战的深度解决方案。文章详细解析了Locale插件与中文语言包的核心机制,并分步指导如何通过配置JVM环境、正确安装插件及执行深度排查,彻底解决汉化顽疾,实现Jenkins界面的完美中文显示。

weixin_42611310的博客 260

解锁仓颉编程语言的奥秘:枚举类型、模式匹配与类接口全解析

Red,Green,Blue,// 输出: Green模式是仓颉语言中用于结构化解构和匹配的数据描述方式。字面量模式枚举模式结构模式通配符模式仓颉语言中的类支持面向对象的建模,包含属性和方法。// 输出: Hello, my name is Alicec.draw();本文深入剖析了仓颉编程语言的基础数据类型及其高级用法,并通过代码示例展示了每种类型的实际应用场景。

2301_80863610的博客 1923

Selenium|通过更改亚马逊amazon的配送地获取当地的cookie

如果我们需要拿到国外配送地的商品信息,这个时候就需要用到selenium或者pypputeer自动化的方法去更改配送地,拿到当地的cookie信息,之后,携带当地的cookie使用requests发送请求,就可以拿到国外配送地的商品数据信息。一般来说,我们访问亚马逊,亚马逊的配送地一般显示的是国内,但是国内的商品信息和国外的商品信息其实是存在很大差别的,比如你在搜索框输入某个关键词,看到的

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 995

【腾讯小龙虾WorkBuddy专栏05】深度解析WorkBuddy连接器(Connector)

深度解析WorkBuddy连接器(Connector)

AI人人懂 1318

仓颉编程语言青少年基础教程:输入输出

《仓颉编程语言青少年基础教程:输入输出》介绍了仓颉v1.0.0的输入输出功能实现方式。仓颉编程语言v1.0.0的输入输出由标准库的core 包(std.core)和env 包(std.env)提供。标准库的convert包(std.convert),提供了类型转换和格式化功能。。教程通过多个示例代码,演示了从控制台读取输入、处理不同类型数据以及格式化输出的具体方法,适合青少年学习编程基础。

cnds123的专栏 2000

精度0.01%决定续航多20km|新能源汽车研发测试:功率分析仪到底有多硬核?

新能源汽车测试、功率分析仪、电驱系统、效率MAP、谐波THD、GB/T18488、CLTC工况、三电测试、台架标定、能量流分析。中的核心作用,用公式、思维导图、实战金句与避坑指南,帮研发测试人员把准数据、提效率、降返工,看完就能落地用。点击关注,进公众号主页查看历史文章,**台架接线图、效率MAP模板、GB/T18488测试清单等。优化弱磁/调制策略,高效区占比提升5%,CLTC续航直接+8~20km。同样工况,两次数据差0.8%,报告根本没法交。结果:数据飘、定位慢、反复返工、认证不过。

优快云-新能源汽车研发测试专业博主 174

仓颉语言中的字符串操作及常用类型转换

本文介绍了仓颉编程语言中的字符串操作和类型转换功能。字符串操作方面,详细讲解了字符/字节数组转换、长度获取、子串查找、替换、分割/连接以及大小写转换等方法,并强调了StringBuilder的高效拼接优势。类型转换部分展示了数字转字符串、字符串转布尔值和整数等常见操作,所有转换方法都需导入std.convert.Parsable包。仓颉语言通过丰富的内置方法,为开发者提供了强大且安全的字符串处理和类型转换能力。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 1511

【论文复现】水下单光子激光雷达设计 Sequential Multimodal Underwater Single

针对对慢速小水下目标进行远距离、高分辨率重建的需求,单光子激光雷达(LiDAR)目标重建技术的研究正在进行。本文报告了一种基于时空序列融合的顺序多模态水下单光子 LiDAR 自适应目标重建算法,该算法具有强大的信息提取和噪声过滤能力,能够从复杂的回波光子计数和空间像素关系中重建目标的深度和反射强度信息。该方法包括三个步骤:数据预处理、序列优化极值推断滤波以及图像优化协同变分策略,以实现复杂水下环境下的高质量目标重建。

u012133341的博客 293

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

探索仓颉编程语言:从Hello World到性能实战

仓颉编程语言是一款面向全场景开发的现代编程语言,具备高效编程、安全可靠、轻松并发和卓越性能等特性。本文介绍了仓颉的安装方法,通过Hello World示例展示其基本语法,并与Python进行了性能对比测试。在计算密集型任务中,仓颉展现出6倍以上的性能优势,同时内存占用减少73%。虽然Python在开发便捷性上仍有优势,但仓颉凭借静态类型系统、本地代码编译等特性,为高性能应用开发提供了新选择。

weixin_63866037的博客 1146

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【仓颉编程语言开发体验】使用仓颉实现aspnetcore

最开始是通过华为官方发布的仓吉白皮书熟悉了一下cangjie编程语言。通过白皮书指南,第一感受是cangjie几乎涵盖了我开发过程需要的特性。比较亮眼的是强制的Nullable类型处理,和静态ast编译技术。于是下意识的认为,动态特性上面也不会让人失望。可实际体验下来发现动态特性非常薄弱,随着开发需求和业务复杂性的提升,对动态特性的需求也变得越来越强烈。对cangjie在动态特性方面的薄弱也感到失望。以及对于aot,宏泛滥如果构建大型项目(有些模块无法编译成lib)在编译速度等方面的担忧。

if_else_if_else的博客 1208

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【华为仓颉编程语言】初识仓颉语言

今天这节课,我们将一起揭开仓颉编程语言的神秘面纱。可能有同学会问:"老师,现在编程语言已经这么多了,为什么还要学习仓颉?" 这个问题问得好!接下来,我会带大家深入了解仓颉语言的十大核心特性,相信学完之后,你就会明白仓颉为什么值得我们关注和学习。

九丘教育官方博客 1131

仓颉编程语言 -- 初识(一)

仓颉编程语言 -- 初识(一)

chinusyan的专栏 3025

华为仓颉语言介绍

随着万物互联以及智能时代的到来,软件的形态将发生巨大的变化。一方面,移动应用和移动互联网领域仍然强力驱动人机交互、设备协同、智能化、安全性等方向的创新,另一方面人工智能也同样驱动软件朝智能化、端边云协同等方向演进。新技术、新场景下应用软件的开发对编程语言提出了新的诉求和挑战。仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。

2303_82176667的博客 2831

五年磨一剑——仓颉编程语言如何改变开发者的未来?

仓颉编程语言以智能化、高性能、全场景适用和强安全性为主要特点,特别适用于鸿蒙原生应用开发和高性能场景。原生智能化内置Agent DSL框架,自然语言与编程语言完美融合,支持智能化开发。支持多Agent协作,简化复杂逻辑,实现领域自由组合。全场景适用采用轻量化运行时,即使是低内存设备也能流畅运行。利用嵌入式领域专用语言(eDSL),简化领域开发流程。高性能引入全并发垃圾回收(GC),显著提升应用线程流畅度。提供轻量化线程设计,降低并发处理成本。强安全性。

小凯的博客 1591
上一篇: 仓颉编程语言:子类型关系
下一篇: 仓颉编程语言:泛型概述
懂你的大海
博客等级 码龄6年 9049粉丝 1381原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值