Nim教程【四】
不得不说Rust也是门不错的语言,园子里
有人曾经说:
还有人曾这样评价Rust语言
但是,但是Nim兴盛起来,Rust就不算什么了
有人不相信,问我:vczh轮子大神曾经说过这样的话吗?
我只想说:你去找他求证嘛!这样就知道我是不是瞎编的了。
|
高雅的Nim
宏可以使用命令式编程方式来构造分析树(parse trees),使用Nim并不需要换一种编程风格来来完成元数据编程(这又是在黑.NET吗)
宏不能改变Nim的语法(不能用宏来做语法糖),因为完全就木有这个必要,因为Nim的语法已经足够灵活了
通过缩进来分隔代码块,缩进不能使用tab制表符,这样编译器能更好的处理代码(说这一句有毛用啊?)
|
别的语言都叫function或者method,Nim给方法叫做Procedures,我们先来看一个方法的定义
Nim用proc声明一个方法,这个方法的名字叫做yes,要求输入一个string类型的参数,参数名是question,返回一个bool类型的值,用return关键字返回值,并跳出这个方法的作用域(同时也跳出了while循环)
|
只要一个方法被定义成有返回值的方法,
那么Nim会给你默认创建一个result变量,
你可以在方法中不用声明就使用这个result变量,不管你方法中有没有retun指令,到方法执行结束,都会返回这个result变量
来看看下面的代码
如果你又用var 声明了一个result,就会隐藏掉Nim为你默认创建的那个result,这是result就和普通变量没有区别了
|
为了执行效率,在方法体内部不能改变参数的指
如果你只是想在方法体内部使用与参数同名的变量,那么,没关系,
你可以在方法体内部,使用var重新定义一个同名参数,隐藏掉本身的方法参数
这样就可以像普通的变量一样使用它了
在上面的方法中,同时也展示了参数的默认值是怎么设置的。
如果你一定要在方法体内部改变参数的值,
(这是十分常见的,因为这样做可以为调用者提供信息)
那么你可以在声明参数的时候,使用var关键字,就像下面这样:
在上面的方法中,参数res、remainder的值会被改变,而且方法的调用者也会获悉这个改变 |
在主流编程语言中,一个方法存在返回值,如果我们只想调用这个方法,而不使用他的返回值,那我们不理会他的返回值就是了
在Nim中,这是不允许的,你必须显示的丢弃掉他的返回值才行,就像下面的代码一下
上面的yes方法声明的时候定义了返回值,如果你不想用它的返回值,就只能用discard显示丢弃掉他的返回值
当然,你可以在声明方法的时候,就显示的声明,这个方法的返回值是可以丢弃的,就像下面这样:
|
有的时候一个方法包含很多参数,使用这个方法的人只记得参数的名字,但不记得参数的顺序了,那么你可以使用具名参数来解决这个问题,就像下面这样:
这样做,可读性又好,使用起来又方便,真是amazing
当然你可能记得前几个参数的顺序,后面几个参数的顺序不记得了,没关系,你可以这么用
|
Nim教程【四】的更多相关文章
- CRL快速开发框架系列教程四(删除数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)
前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...
- C#微信公众号开发系列教程四(接收普通消息)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- 无废话ExtJs 入门教程四[表单:FormPanel]
无废话ExtJs 入门教程四[表单:FormPanel] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在窗体里加了个表单.如下所示代码区的第28行位置,items:form. ...
- TFS(Team Foundation Server)敏捷使用教程(四):工作项跟踪(1)
工作项跟踪(1) 可跟踪性是软件过程的重要能力,TFS主要是以工作项来实现过程的可跟踪性.曾有人问:"你们实际项目里的工作项是怎么样的?能不能让我们看看?"我也一直很好奇别的公司T ...
- Android Studio系列教程四--Gradle基础
Android Studio系列教程四--Gradle基础 2014 年 12 月 18 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang ...
- Laravel教程 四:数据库和Eloquent
Laravel教程 四:数据库和Eloquent 此文章为原创文章,未经同意,禁止转载. Eloquent Database 上一篇写了一些Laravel Blade的基本用法和给视图传递变量的几种方 ...
- NGUI系列教程四(自定义Atlas,Font)
今天我们来看一下怎么自定义NGUIAtlas,制作属于自己风格的UI.第一部分:自定义 Atlas1 . 首先我们要准备一些图标素材,也就是我们的UI素材,将其导入到unity工程中.2. 全选我们需 ...
- Qt零基础教程(四) QWidget详解篇
在博客园里面转载我自己写的关于Qt的基础教程,没次写一篇我会在这里更新一下目录: Qt零基础教程(四) QWidget详解(1):创建一个窗口 Qt零基础教程(四) QWidget详解(2):QWid ...
- Qt零基础教程(四)QWidget详解(3):QWidget的几何结构
Qt零基础教程(四) QWidget详解(3):QWidget的几何结构 这篇文章里面分析了QWidget中常用的几种几何结构 下图是Qt提供的分析QWidget几何结构的一幅图,在帮助的 Wind ...
随机推荐
- AX2009按照批次生产日期预留
AX2009如果想按照批处理号预留,它默认是按照InventBatchId排序的,但并不是InventBatchd小的批次的生产日期就早,所以这个逻辑得改一下,让它按照InventBatch的Prod ...
- javascript-test1
var AAA = function(name, age) { this.name = name ; this.age = age; } AAA.prototype.getName = functio ...
- The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
问题 The certificate used to sign "AppName" has either expired or has been revoked. An updat ...
- J. Bottles 二维费用背包问题
http://codeforces.com/contest/730/problem/J 3 4 36 1 90 45 40 其实可以知道,选出多少个瓶子呢?是确定的,当然选一些大的 ...
- max10中对DDR数据的采样转换
(1)发现IP是这样处理DDR的数据:上长沿采的数据放在低位,下降沿采的数据在高位 (2)对于视频的行场信号是在下降沿采集,再延时一拍才能与数据对齐.
- centos安装Python2.7
1. 查看本机系统及python版本 # cat /etc/redhat-release CentOS release 6.7 (Final) 查看CentOS release 6.7 (Final) ...
- ssh框架整合---- spring 4.0 + struts 2.3.16 + maven ss整合超简单实例
一 . 需求 学了这么久的ssh,一直都是别人整合好的框架去写代码,自己实际动手时才发现框架配置真是很坑爹,一不小心就踏错,真是纸上得来终觉浅! 本文将记录整合struts + spring的过程 , ...
- iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)
iOS页面间传值实现方法:1.通过设置属性,实现页面间传值:2.委托delegate方式:3.通知notification方式:4.block方式:5.UserDefault或者文件方式:6.单例模式 ...
- 小甲鱼python视频第九讲(课后习题)
1.列表里可以存放什么东西? 可以存放任何的数据类型, list1 = ['我爱你','i love you',1314] print(list1) 2.向列表中添加元素 append(将参数作为一个 ...
- Hibernate个人学习笔记(1)
连接池c3p0所需jar包:Hiberbate开发包-lib-optional-c3p0下全部Jar包 Hiberbate连接池参数配置:Hiberbate开发包-project-etc-hibern ...