Nim教程【七】

这是国内第一个关于Nim的系列教程

先说废话

很开心,在今天凌晨快一点多的时候拿到了

nim-lang.com;nim-lang.cn;nim-lang.net

这三个域名,到不是为了投资,准备用nim-lang.com做一个社区出来

不知道国内有没有人或者机构打算赞助这个事情的

整型

Nim语言中有10个整型类型

int;int8;int16;int32;int64;uint;uint8;uint16;uint32;uint64

默认的整型类型是int

可以使用尾缀的方式来设置整型的类型,就像下面的代码这样:

letx = 0     # x 的类型是inty = 0'i8  # y 的类型是int8 z = 0'i64 # z 的类型是int4 u = 0'u   # u 的类型是intuint

由于整形类型经常被用于计算内存里的对象

所以整形的大小和指针的大小一样

常见的操作符

+    -    *   div   mod    <   <=   ==  !=  >   >=

都可以用在整形身上

还有一些按位计算的操作符:

and     or     xor    not   

也可以用在整型身上

shl操作符可以完成左移位操作

shr操作符可以完成右移位操作

移位操作一般都会把目标当作无符号的整形来对待

因为移位操作往往会导致乘法或除法操作

针对无符号的操作数,操作符做做过二次封装,不会产生内存泄漏或溢出的问题

在表达式中使用不同类型的整型时,会导致类型转化

宽度比较小的类型会被转化成宽度比较大的类型

整形不会自动转化成浮点类型

同样,浮点类型也不会自动转化成整形

toInt方法和toFloat方法可以用来处理这两种类型转化操作

浮点类型

有三种浮点类型

float    float32     float64

默认的浮点类型是float,在现在的Nim实现中,float类型总是64位的

也可以用尾缀的方式来设置浮点类型的宽度,看下面的代码:

varx = 0.0      # x 的类型是floaty = 0.0'f32  # y 的类型是float32z = 0.0'f64  # z 的类型是float64

+   -   *    /    <    <=     ==    !=   >     >=

以上这些操作符也可以用于浮点类型(遵从IEEE标准)

和整型类型一样,不同宽度的浮点类型出现在一个表达式中的时候

宽度较小的浮点类型将被格式化成宽度较大的浮点类型

 

整形不会自动转化成浮点类型

同样,浮点类型也不会自动转化成整形

toInt方法和toFloat方法可以用来处理这两种类型转化操作

类型转化

基本数据类型的关键字本身就是一个方法,可以用这些方法完成格式转化工作

就像下面的代码一样:

varx: int32 = 1.int32   # same as calling int32(1)y: int8  = int8('a') # 'a' == 97'i8z: float = 2.5       # int(2.5) rounds down to 2sum: int = int(x) + int(y) + int(z) # sum == 100

$操作符和repr方法

nim中的内置类型都可以用$操作符把数据格式化成字符串

但是对于一些高级类型,或者用户自定义的类型

$就无能为力了(除非你为这些类型重新定义了$操作符)

有些时候你只是想在调试的时候看看一个复杂类型的值

如果每次都要为这个复杂类型定义一个$操作符,那就太麻烦了

这个时候你可以使用repr方法

repr方法可以应用于任何类型,甚至自关联类型也没有问题

来看看下面的代码

varmyBool = truemyCharacter = 'n'myString = "nim"myInteger = 42myFloat = 3.14
echo($myBool, ":", repr(myBool))
# --> true:true
echo($myCharacter, ":", repr(myCharacter))
# --> n:'n'
echo($myString, ":", repr(myString))
# --> nim:0x10fa8c050"nim"
echo($myInteger, ":", repr(myInteger))
# --> 42:42
echo($myFloat, ":", repr(myFloat))
# --> 3.1400000000000001e+00:3.1400000000000001e+00

注意在repr(mystring)的时候,他的内存地址也被输出出来了

关键字type

在Nim中,使用type关键字来定义一个类型,来看下面的代码:

typebiggestInt = int64      # biggest integer type that is availablebiggestFloat = float64  # biggest float type that is available

对象类型和枚举类型也是通过type关键字定义的

枚举类型

一个枚举类型定义了一个有序的值序列

值序列中的每个值都是整型的

第一个值为0,第二个值是1,依次类推

一个枚举类型的变量只能被赋值为这个序列值中的一个

来看段代码:

typeDirection = enumnorth, east, south, westvar x = south      # `x` is of type `Direction`; its value is `south`
echo($x)           # writes "south" to `stdout`

上面代码中定义的变量x的类型是Direction

注意:最后一行代码输出的内容是south,而不是2,

如果使用ord方法的话,可以得到枚举变量的值

所有的与比较相关的操作符都可以用在枚举变量身上

可以使用点操作符来避免歧义,就像下面的代码一样:

var x = Direction.south

为了更好的兼容其他语言,枚举类型内定义的符号可以指定为特定的值

但是在你指定特定值的时候,一定要按大小顺序指定

如果你没有明确给定一个符号的值,那么这个符号的值就是他上一个符号的值再加1

来看一下下面的示例代码:

typeMyEnum = enuma = 2, b = 4, c = 89

 

好,今天就写到这里,喜欢的人请点推荐!

 

转载于:https://www.cnblogs.com/liulun/p/4519815.html

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

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

相关文章

验证必须是数字php,Element 中表单非必填数据项 必须为数字的验证问题

Element-ui 的el-form组建中&#xff0c;自带基本的验证功能&#xff0c;比如某些项必填的验证&#xff0c;直接加入rules 规则中即可&#xff0c;如下实例&#xff1a;在页面中书写如下&#xff1a;在vue 初始化data中filterForm: {firstDay: ,lastDay: },rules: {firstDay: […

为开发者准备的9个实用PHP代码片段(转)

[导读] 当你开发网站、app或博客系统时&#xff0c;如果有一些实用的代码片段可以直接使用&#xff0c;就可以节省你大量的时间和精力。这篇文章就为你分享几个实用的PHP代码片段&#xff0c;帮助你的Web开发。 本文由PHP100中文网编译&#xff0c;转载请看文末的转载要求&…

idea 自动生产序列吗,IDEA自动生成序列化Id

实体对象实现了java.io.Serializable接口后&#xff0c;一般都会提供一个serialVersionUID以做版本区分。在idea里&#xff0c;可以通过设置来快速生成serialVersionUID。设置方法1、打开Preferences–>Editor–>Inspections&#xff0c;然后在右侧输入UID进行搜索(搜索方…

ZH奶酪:Ionic中(弹出式窗口)的$ionicModal使用方法

Ionic中[弹出式窗口]有两种&#xff08;如下图所示&#xff09;&#xff0c;$ionicModal和$ionicPopup; $ionicModal是完整的页面&#xff1b; $ionicPopup是(Dialog)对话框样式的&#xff0c;直接用JavaScript设定对话框的一些参数&#xff0c;通常用于通知消息、确认等作用&a…

php getdefaultvalue,PHP ReflectionParameter getDefaultValueConstantName()用法及代码示例

ReflectionParameter::getDefaultValueConstantName()函数是PHP中的内置函数&#xff0c;如果默认值为常数或null&#xff0c;则用于返回默认值的常数名称。用法:string ReflectionParameter::getDefaultValueConstantName ( void )参数&#xff1a;该函数不接受任何参数。返回…

php表单中姓名必须使用汉字,我想在表单验证中加入中文姓名合法性模糊匹配判断?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼刚开始只是想检验一下输入的是不是中文&#xff0c;后来学了正则表达式后&#xff0c;想尝试一下&#xff0c;把常见的姓氏通过字符串判断的形式&#xff0c;主要是对姓氏进行验证&#xff0c;当然还有输入长度&#xff0c;可我对自…

php实现购物车 redis,redis 哈希数据类型简单操作(实现购物车案例)

这里不累赘如何安装redis和php redis扩展&#xff0c;主要熟悉调用redis哈希数据类型如图简单方法操作如下1&#xff1a;hSet2:hGet4:hDel5:hGetAll4:hExists5:hIncrBy简单购物车实现namespaceHome\Controller;useThink\Controller;useOrg\Net\Http;useThink\Cache\Driver\Red…

写在25岁

虽然到25岁&#xff0c;大家会告诉你女人容颜开始衰退&#xff0c;要多加注意保养&#xff0c;要学会化妆&#xff0c;要会穿高跟鞋。虽然到25岁&#xff0c;大家告诉你要赶紧结婚生子&#xff0c;否则女人开始贬值。虽然到25岁&#xff0c;大家会告诉你工作不要那么拼&#xf…

matlab中D A1在哪,A1=d(1:15,:);A2=d(16:30,:);A3=

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼A1d(1:15,:);A2d(16:30,:);A3d(31:45,:);A4d(46:60,:);A5d(61:75,:);A6d(76:90,:);B1d(91:105,:);B2d(106:120,:);B3d(121:135,:);B4d(136:150,:);B5d(151:165,:);B6d(166:180,:);B7d(181:195,:);B8d(196:210,:);B9d(211:225,:);C1…

使用block的好处

1 使用block 可以轻松地绑定各处代码块&#xff0c;使用delete 结构是分散的&#xff0c;不利于变量之间传值&#xff0c;不像block可以随意地获取变量值。 2.使用block可以方便执行异步代码&#xff0c;作为异步处理回调。 In terms of code readability, the block makes it …

python mysql ssl,python – 在SQLAlchemy中使用SSL

我最近改变了我的项目使用SQLAlchemy并且我的项目运行正常,它使用了外部MySQL服务器.现在我正在尝试使用具有SSL CA的不同MySQL服务器,并且它不会连接.(它确实使用MySQL Workbench进行连接,因此证书应该没问题)我正在使用以下代码&#xff1a;ssl_args {ssl: {ca: ca_path}}en…

Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法

Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法 在添加完之后&#xff0c;可以使用 $.parser.parse();这个方法进行处理:(1) 对整个页面重新渲染: $.parser.parse();  (2) 渲染某个特定的组件:var targetObj $("<input namemydate classeasyui-date…

ftp完成版本更新php,php – 将开发团队从FTP转换为版本控制系统

问题&#xff1a;>你(他们)从来没有遇到过灾难,你(他们)需要恢复到以前版本的网站,但却不能因为他们破坏了它&#xff1f;>他们是否使用临时Web服务器来测试更改&#xff1f;>当然,如果没有某些测试,他们不会修改生产服务器中的代码&#xff1f;我怀疑第一个的答案是“…

IOS-NSDateFormatter使用介绍

IOS-NSDateFormatter使用介绍 NSDateFormatter的使用&#xff1a; NSDate *nowDate [[NSDate alloc] init];NSDateFormatter *dateFormatter [[NSDateFormatter alloc] init];[dateFormatter setDateFormat:"yyyy-mm"];NSString *time [dateFormatter stringFromD…

php scsi平台,三大SCSI Target平台PK:让服务器化身SAN

就服务器而言&#xff0c;从虚拟化平台到数据库应用的许多功能&#xff0c;都需要有SAN存储设备的支持&#xff0c;但是对于模拟测试、教学之类的应用来说&#xff0c;受到成本限制采购SAN存储设备便有所困难。特别是企业&#xff0c;都不会仅仅为了测试等常态使用的用途&#…

[BZOJ 1012] [JSOI 2008] 最大数maxnumber

1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5094 Solved: 2276[Submit][Status][Discuss]Description 现在请求你维护一个数列&#xff0c;要求提供以下两种操作&#xff1a; 1、 查询操作。语法&#xff1a;Q L 功能&#xff1a;查询当…

php 数组元素往后移动,php 二维数组 元素移动

[已关闭问题]关闭于 2014-11-20 16:02二维数组元素如何实现&#xff0c;满足一定的条件&#xff0c;跳到下下个元素&#xff0c;不满足的话&#xff0c;顺序执行呢&#xff1f;比如&#xff1a;header("Content-type:text/html;charsetutf-8");$arr array(array(id&…

RequireJS

RequireJS 2.0 正式发布 RequireJS入门&#xff08;一&#xff09; RequireJS入门&#xff08;二&#xff09; RequireJS入门&#xff08;三&#xff09; RequireJS进阶&#xff08;一&#xff09; RequireJS进阶&#xff08;二&#xff09; RequireJS进阶&#xff08;三&…

帝国cms仿php自媒体新闻系统,帝国CMS仿《砍柴网》源码 专栏自媒体投稿资讯文章新闻网站模板...

在开发妹入手了一套模版&#xff0c;测试效果真心不错这里发出来供大家参考研究源码简介一家拥有全球视野的前沿科技媒体&#xff0c;我们始终秉承观点独到、全面深入、有料有趣的宗旨&#xff0c;在科技与人文之间寻找商业新价值&#xff0c;坚持以人文的视角解读科技&#xf…

【Win10】UAP/UWP/通用 开发之 x:Bind

【Win10】UAP/UWP/通用 开发之 x:Bind [Some information relates to pre-released product which may be substantially modified before its commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.] […