2018-11-13 中文代码示例之Programming in Scala学习笔记第二三章

由于拷贝后文档格式有变, 仅摘几段如下. 完整而且代码带语法高亮的源版在: program-in-chinese/Programming_in_Scala_study_notes_zh
前言: 本书已有中文版, 此笔记并不是对原教程的翻译, 而是围绕示例进行选摘, 并顺便将所有示例改成中文命名(不拘泥于原本命名用词, 而是融入中文特色).
本文代码在Scala 2.12.4, Java 1.8.0_45下测试通过
第一章 普适的语言
1.1
var 首都 = Map("中国" -> "北京", "俄罗斯" -> "莫斯科")
首都 += ("德国" -> "柏林")
println(首都("俄罗斯"))
(待续. 先从第二章开始)
第二章略
第三章
[略大部]
第十步 使用集合(Set)和映射(Map)
(这里开始仅包含例程与极简说明, 如有空再补详细说明) 不可变集合
var 客机厂商 = Set("空客", "波音")
客机厂商 += "商飞"
println(客机厂商.contains("大疆"))
可变集合
import scala.collection.mutable
val 电影 = mutable.Set("舌尖一", "舌尖二")
电影 += "舌尖三"
println(电影)
如需指定使用HashSet, 就import scala.collection.immutable.HashSet
可变映射
import scala.collection.mutable
val 寻宝指南 = mutable.Map[Int, String]()
寻宝指南 += (1 -> "上荒岛")
寻宝指南 += (2 -> "在地上找个那啥")
寻宝指南 += (3 -> "开挖")
println(寻宝指南(2))
不变映射
val 中文数字 = Map(1 -> "一", 2 -> "二", 3 -> "三", 4 -> "四", 5 -> "五")
println(中文数字(4))
第十二步 从文件读行
[部分略]
如想输出更漂亮, 下面是最终版:
import scala.io.Source
def 字符数宽度(文本: String) = 文本.length.toString.length
if (args.length > 0) {
val 行 = Source.fromFile(args(0)).getLines().toList
val 最长行 = 行.reduceLeft(
(行1, 行2) => if (行1.length > 行2.length) 行1 else 行2
)
val 最大宽度 = 字符数宽度(最长行)
for (某行 <- 行) {
val 空格数 = 最大宽度 - 字符数宽度(某行)
val 缩进 = " " * 空格数
println(缩进 + 某行.length + " | " + 某行)
}
}
else
Console.err.println("请输入文件名")
运行scala 统计字符2.scala 统计字符2.scala输出如下:
22 | import scala.io.Source
0 |
49 | def 字符数宽度(文本: String) = 文本.length.toString.length
0 |
22 | if (args.length > 0) {
52 | val 行 = Source.fromFile(args(0)).getLines().toList
25 | val 最长行 = 行.reduceLeft(
53 | (行1, 行2) => if (行1.length > 行2.length) 行1 else 行2
3 | )
23 | val 最大宽度 = 字符数宽度(最长行)
17 | for (某行 <- 行) {
30 | val 空格数 = 最大宽度 - 字符数宽度(某行)
22 | val 缩进 = " " * 空格数
40 | println(缩进 + 某行.length + " | " + 某行)
3 | }
1 | }
4 | else
31 | Console.err.println("请输入文件名")
(第三章完)
发现的中文相关问题
命令行交互环境中, 错误信息对中文字符的定位不准. 这很干扰排错. 比较如下两个同样出错信息:
scala> println(["2"])
<console>:1: error: illegal start of simple expression
println(["2"])
^
scala> 打印参数(["2"])
<console>:1: error: illegal start of simple expression
打印参数(["2"])
^
2018-11-13 中文代码示例之Programming in Scala学习笔记第二三章的更多相关文章
- 2018-11-16 中文代码示例之Programming in Scala笔记第四五六章
续前文: 中文代码示例之Programming in Scala学习笔记第二三章. 同样仅节选有意思的例程部分作演示之用. 源文档仍在: program-in-chinese/Programming_ ...
- 2018-11-27 中文代码示例之Programming in Scala笔记第七八章
续前文: 中文代码示例之Programming in Scala学习笔记第二三章 中文代码示例之Programming in Scala笔记第四五六章. 同样仅节选有意思的例程部分作演示之用. 源文档 ...
- 2018-12-09 疑似bug_中文代码示例之Programming in Scala笔记第九十章
续前文: 中文代码示例之Programming in Scala笔记第七八章 源文档库: program-in-chinese/Programming_in_Scala_study_notes_zh ...
- Programming Entity Framework-dbContext 学习笔记第五章
### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...
- 中文代码示例之Vuejs入门教程(一)
原址: https://zhuanlan.zhihu.com/p/30917346 为了检验中文命名在主流框架中的支持程度, 在vuejs官方入门教程第一部分的示例代码中尽量使用了中文命名. 所有演示 ...
- 中文代码示例之NW.js桌面应用开发初体验
先看到了NW.js(应该是前身node-webkit的缩写? 觉得该起个更讲究的名字, 如果是NorthWest之意的话, logo(见下)里的指南针好像也没指着西北啊)和Electron的比较文章: ...
- 2017-11-09 中文代码示例之Vuejs入门教程(一)
"中文编程"知乎专栏原链 为了检验中文命名在主流框架中的支持程度, 在vuejs官方入门教程第一部分的示例代码中尽量使用了中文命名. 所有演示都在本地测试通过, 源码在这里. 下面 ...
- 中文代码示例之Angular入门教程尝试
原址: https://zhuanlan.zhihu.com/p/30853705 原文: 中文代码示例教程之Angular尝试 为了检验中文命名在Angular中的支持程度, 把Angular官方入 ...
- 2018-08-11 中文代码示例之Spring Boot 2.0.3问好
上次试用Spring Boot还是两年前: 中文代码示例之Spring Boot 1.3.3演示. 打算用在一个讨论组内小项目上, 于是从官网Building an Application with ...
随机推荐
- Kali学习笔记6:二层发现
先介绍下ARPING命令: arping命令是用于发送ARP请求到一个相邻主机的工具 arping使用arp数据包,通过PING命令检查设备上的硬件地址.能够测试一个IP地址是否是在网络上已经被使用, ...
- 一句话的事儿,Head first 设计模式
head first 设计模式,是比较有趣的一本设计模式的书. 在学校里看书和在工作时看书,意义是不一样的.在学校时是为读书而读书,我们可以从0到1,我们有的是时间.但是工作后就不一样. 我觉得这时的 ...
- RIPng配置(第十三组)
拓扑如下 配置rip指令和ipv6包允许路由指令以r1为例 在r1上配置拓扑上对应网段的ip,r1上两个连接路由器的端口手动设置ip,同网段的路由器端口ip自动获取. r2配置 r3 配置完后查看路由 ...
- python学习笔记01-变量
变量的作用: 1.保存信息 方便日后被调用 操作 2. 更改 代表描述性的意思 让人明白是什么意思 行业命名规则: 1.student_number 2.studentNumber 驼峰体 不要以大 ...
- python(leetcode)-344反转字符串
编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 你可以 ...
- 【翻译】JavaScript内存泄露
原文地址:http://javascript.info/tutorial/memory-leaks#tools 我们在进行JavaScript开发时,很少会考虑内存的管理.JavaScript中变量的 ...
- Centos系统通过tar.gz包安装Mysql5.7
1.安装mysql之前需要确保系统中有libaio依赖,使用如下命令: yum search libaio yum install libaio 2.进入centos终端操作界面,使用wget命令下载 ...
- Microsoft解读
微软-这个在软件行业影响着我们这个时代 我们所了解的微软或许只在于windows操作系统和office办公软件.但是我们如果只这样认为,那就大错特错了,微软能成为全球互联网巨头,并不是那么简单.今天我 ...
- 可以落地的DDD到底长什么样?
领域驱动设计的概念 大家都知道软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前通常需要进行大量的业务知识梳理,然后才能到软件设计的层面,最后才是开发. ...
- Java线程之 InterruptedException 异常
Java线程之 InterruptedException 异常 当一个方法后面声明可能会抛出InterruptedException 异常时,说明该方法是可能会花一点时间,但是可以取消的方法. 抛 ...