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 ...
随机推荐
- git知识整理
概述 工作中使用git进行代码托管,一开始只知道git add commit,之后了解了git-flow插件,觉得超牛逼,一键生成feature分支,再后来听说原生git命令更好用,于是又去学了原生g ...
- Spring Boot到底是怎么运行的,你知道吗?
导读 Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较流行的微服务框架Spring ...
- [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了
[译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...
- web.xml配置web中的key points(下)
一.配置jsp页面 [jsp-config]中有两个子元素[taglib][jsp-property-group],注意,前者必须出现在后者之前. ①[taglib]替代jsp页面中taglib指令 ...
- CSS从零开始(1)--CSS基础语法
1.CSS语法 CSS规则有两个主要部分构成:选择器,以及一条或多条说明. 例如:selector{declaration1;declaration2;declaration3;......;} 注: ...
- Maven内置属性、POM属性
1.内置属性(Maven预定义,用户可以直接使用) ${basedir}表示项目根目录,即包含pom.xml文件的目录; ${version}表示项目版本; ${project.basedir}同${ ...
- VS Code 安装 C++ 调试环境
在 VS CODE 中安装 C/C++ 插件 安装编译.调试环境 这里安装的是 MinGW, 官网如下:http://mingw.org/ 下载后,双击进行安装安装路径可以根据需要来修改: 然后选择需 ...
- python学习笔记之自定义函数的导入
python可以将自己编写的类放在py文件中,然后由其他程序调用,今天分享下:如何在shell中从文件引用自定义类和函数,下面是具体的过程: 第一步将你编写的文件声明编码类型 然后将你编写的文件保存为 ...
- 第2章 细说Linux系统用户/组管理(1)
2.1 用户和组的基本概念 用户和组是操作系统中一种身份认证资源. 每个用户都有用户名.用户的唯一编号uid(user id).所属组及其默认的shell,可能还有密码.家目录.附属组.注释信息等. ...
- Perl的time、localtime和gmtime函数
time用于返回当前时间点,但返回结果是以从1970年1月1日(纪元由操作系统决定,但unix系统一般都是1970年1月1日)距离现在的秒数表示的 localtime用于返回给定时间的秒.分.时.日. ...