Nim教程【二】
|
Nim代码会编译成C语言的代码,再编译成本地机器码,不依赖于虚拟机,
而且生成的可执行文件比较小,不依赖于其他库,分发起来比较方便
拥有一个“非追踪式”的垃圾收集器,这就非常适用于类似游戏这样的“弱实时”系统
让程序员拥有直接操纵内存和访问硬件的权力(手动管理的内存有别于垃圾收集器可收集的内存)
零开销的迭代器
Cross-module inlining(这是跨模块代码嵌入吗?不知道怎么翻)
实现了动态方法绑定,但并没有用到虚拟方法表
(virtual method table,这是在黑.NET吧)
编译期评估用户自定义的方法
无用代码自动消除
直接在栈上为实例、对象、数组分配空间
|
|
var name: string = readLine(stdin)
|
这行代码定义了一个string类型的变量,从控制台输入获取字符串,赋值给这个变量
|
var name = readLine(stdin)
|
因为,在编译的时候nim知道控制台输入的东西是一个字符串类型的值,所以变量的类型也一定是字符串类型的
|
var path = r"C:\program files\nim"
|
这就是传说中的“原始字串”,在原始字串中,反斜杠不会被当作转义符
大段文本
Nim允许开发人员用成对儿的三个分号包住大段文本,文本里的反斜杠也不会被当作转义符
|
var str = """这是我的大段文本
我换了一行
我又换了一行
就算有反斜杠,\,也不会被当作转义符"""
|
注释
|
#这是一行注释
var name = readLine(stdin)
|
在现有代码后面写注释,要用两个##号,代码如下:
|
var name = readLine(stdin)
##这是行尾注释 |
关键字var
|
var x,y:int
|
上面的代码定义了两个整形的变量
|
var
x , y : int
i , z : string
|
|
var x , y = 3
|
关键字const
|
const x = 4
|
|
const
x = 4
y = x+5
z = "allen"
|
需要注意的是:
关键字let
|
const input = readLine(stdin) # Error: 运行期的值不能赋给const变量
let input = readLine(stdin) # works:运行期的值可以赋给let定义的变量
|
关键字 if elif和else
|
let name = readLine(stdin)
if name == "":
echo("Poor soul, you lost your name?")
elif name == "name":
echo("Very funny, your name is name.")
else:
echo("Hi, ", name, "!")
|
关键字 case of和esle
(少写一个字母是一个啊)
|
let name = readLine(stdin)
case name
of "":
echo("Poor soul, you lost your name?")
of "name":
echo("Very funny, your name is name.")
of "Dave", "Frank":
echo("Cool name!")
else:
echo("Hi, ", name, "!")
|
我们再来看一段代码
|
from strutils import parseInt
echo("A number please: ")
let n = parseInt(readLine(stdin))
case n
of 0..2, 4..7: echo("The number is in the set: {0, 1, 2, 4, 5, 6, 7}")
of 3, 8: echo("The number is 3 or 8")
else: discard
|
如果什么条件都没有满足,那么就会进入else分支
关键词 while
|
echo("What's your name? ")
var name = readLine(stdin)
while name == "":
echo("Please tell me your name: ")
name = readLine(stdin)
|
一定要注意最后一行的缩进,如果没有这个缩进,会出问题,我们后面会讲到
关键词for和..
|
echo("Counting to ten: ")
for i in countup(1, 10):
echo($i)
|
(少写一个字母是一个啊)
|
echo("Counting to ten: ")
for i in 1..10:
echo($i)
|
Nim教程【二】的更多相关文章
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...
- C#微信公众号开发系列教程二(新手接入指南)
http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...
- 无废话ExtJs 入门教程二十一[继承:Extend]
无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...
- 无废话ExtJs 入门教程二十[数据交互:AJAX]
无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...
- 无废话ExtJs 入门教程二[Hello World]
无废话ExtJs 入门教程二[Hello World] extjs技术交流,欢迎加群(201926085) 我们在学校里学习任何一门语言都是从"Hello World"开始,这里我 ...
- Android Studio系列教程二--基本设置与运行
Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...
- Laravel教程 二:路由,视图,控制器工作流程
Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就 ...
- Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!
分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ...
- NGUI系列教程二
接下来我们创建一个Label,NGUI->Open the Widget Wizard,打开widgetTool对话框,在Template中选择Label,确定AddTo右侧选项为panel,点 ...
随机推荐
- Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、
查询所有表名:select t.table_name from user_tables t;查询所有字段名:select t.column_name from user_col_comments t; ...
- jafka的zk数据
查看topics: ls /brokers/topics [mytopic] 查看topic所在的broker,下面例子,mytopic在broker 0 中管理. ls /brokers/topic ...
- web测试特别点
1.浏览器的后退按钮 提交表单一条已经成功提交的记录,back后再提交,看系统会如何处理. 检查多次使用back健的情况在有back的地方,back,回到原来的页面,再back,重复几次,看是否会 ...
- 【软件工程】电梯调度程序需求分析 李亚文&&郭莉莉
2014年3月4日(14:00-16:00) 为了进一步理解电梯工作的原理,我们特地到石家庄铁道大学春晖楼坐了电梯:春晖楼东办共有电梯两部,最高楼层为11层,最低楼层为-1,两电梯可共同使用.结合调查 ...
- 在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1)
在Linux下使用RAID--使用mdadm工具创建软件Raid 0(1) RAID即廉价磁盘冗余阵列,其高可用性和可靠性适用于大规模环境中,相比正常使用,数据更需要被保护.RAID是一些磁盘的集合, ...
- SVM3 Soft Margin SVM
之前分为两部分讨论过SVM.第一部分讨论了线性SVM,并且针对线性不可分的数据,把原始的问题转化为对偶的SVM求解.http://www.cnblogs.com/futurehau/p/6143178 ...
- 《Cracking the Coding Interview 》之 二叉树的创建 与 遍历(非递归+递归version)
#include <iostream> #include <cstdio> #include <vector> #include <stack> #de ...
- MySql表名的大小写问题
MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的: 1.数据库名与表名是严格区分大小写的: 2.表的别名是严格区分大小写的: 3.列名与列的别名在所有的情况下均是忽略大小写的: 4 ...
- linux安装,window上安装centos虚拟机
使用的软件如下 VMware_workstation_full_12.5.2.exeCentOS-6.5-x86_64-minimal.iso 安装要点: 1 先安装VMware2 建立一个虚拟机,注 ...
- spider
from lxml import etreeimport requestsdef getHtml(html): novelcontent = requests.get(html).content re ...