Scala学习笔记2 (带着问题学习, 逐渐扩展。理解吃透scala.)

问题: 把 文本字符串"[1, 2, 3, 4, 5]" 转换成一个数组。

答案:

val x = "[1, 2, 3, 4, 5]"

val y =x slice(1, x.length-1) replace(",","") split(" ")

var y1= x slice(1, x.length-1) replace(",","") split(" ") map(_.toInt)
y1: Array[Int] = Array(1, 2, 3, 4, 5)

或者写成

var y1= x.slice(1, x.length-1).replace(",","").split(" ").map(_.toInt)

或者

val y:Array[Int]= x slice(1, x.length-1) replace(",","") split(" ") map(_.toInt)

scala鼓励程序员用val声明变量,val实际上是一个常量,无法修改内容。 var声明变量, 可以修改。

不需要给出值或者变量的类型, 因为类型可以从初始化, 或者赋值的表达式里推断出来。

如果指定值或者变量的类型,会执行类型检查, 要求赋值表达式两边的类型要匹配。 例如下面的例子, 赋值会失败,因为类型不匹配。

val y:Array[Int]= x slice(1, x.length-1) replace(",","") split(" ")
<console>:37: error: type mismatch;
found : Array[String]
required: Array[Int]
val y:Array[Int]= x slice(1, x.length-1) replace(",","") split(" ")

类型转换问题:

以上对数组进行类型转换用的是map(_.toInt)

对单个字符串转换的例子是 “1”.toInt, 这里toInt不用加括号。

有意思的是数字转成字符串的时候,1.toString,  1.toString()都是可以的.

在scala中, 类型转化用的都是方法, 而不是强制类型转换.

Int 转成Long 是使用 testInt.toLong而不可以像C++和jaiva里用到的(Long)testInt

关于函数调用问题:

上面例子里 x.slice(1, x.length-1), 也可以用 x slice(1, x.length-1)

scala里调用一个函数可以用

a 方法 b

也可以用

a.方法(b)   用.来引用方法的时候, 必须用括号

还可以

a 方法(b)用空格来引用方法的时候, 且如果只有一个参数,不一定用括号。 上面的写法还可以是

val y =x slice(1, x.length-1) replace(",","") split " "

如果是么有参数的函数, 调用的时候不需要加() , 例如 1.toString()

和java不一样, scala支持重写运算符。 scala有一个伴生对象apply方法, 是不需要显示的写出函数名的。 它是Scala中构建对象的常用方法。 例如

Array(1,4,5,16)返回一个数组用的就是Array伴生对象的apply方法, 看上去类似于构造函数, 但其实不完全是。

再比如"Hello"(4)返回‘o’, 实际上是在调用StringOps类中的def apply(n:Int): Char 方法。

时间: 2024-08-29 07:26:51

Scala学习笔记2 (带着问题学习, 逐渐扩展。理解吃透scala.)的相关文章

2014年7月17日学习笔记--PHP的循环结构学习

今天重新开始学习PHP, 为了学习PHP买了书,但书是一本大部头的书,不好带一直没有好好学习,我决定把书拆了分章来看,这样也方便带 也可以很快完成任务. 今天在linux mint 17上安装了lnmp 环境 和brackets工具,来学PHP,小的例子用vim来完成的. 记录一下自己美化的九九乘法表 代码如下: <?php     for($i=1;$i<=9;$i++){         for($j=1;$j<=9;$j++){             if($i>=$j){

Opencv学习笔记(六)SURF学习笔记

原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345 本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正. 看了harris角点检測之后,開始研究SURF角点检測,发现挺复杂的,一时也仅仅了解了大概,把了解的东西总结下,以便下次深入学习. SURF角点检測算法是对SIFT的一种改进,主要体如今速度上,效率更高.它和SIFT的主要差别是图像多尺度空间的构建方法不同. 在计算视觉领域,尺度空间被象征性的表述

JUnit4学习笔记(四):利用Rule扩展JUnit

一.Rule简介 Rule是JUnit4中的新特性,它让我们可以扩展JUnit的功能,灵活地改变测试方法的行为.JUnit中用@Rule和@ClassRule两个注解来实现Rule扩展,这两个注解需要放在实现了TestRule借口的成员变量(@Rule)或者静态变量(@ClassRule)上.@Rule和@ClassRule的不同点是,@Rule是方法级别的,每个测试方法执行时都会调用被注解的Rule,而@ClassRule是类级别的,在执行一个测试类的时候只会调用一次被注解的Rule 二.JU

Hadoop学习笔记(10) ——搭建源码学习环境

Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步调试呢? 看程序不能调那多痛苦啊,想看跟踪一下变量,想看一下执行路径都难. 所以这里,我们得把这个调试环境搭建起来.Hadoop的主要代码是用java编写的,所以这里就选用eclipse作为环境. Hadoop目录下,本身就可以为作eclipse的一个工程来操作,但这里我不想,我想自己来建一个工程,

.NET学习笔记(1)— C#学习路线图

目录 一:引言 二:.NET技术体系 三:常用工具汇总 四:学习资源汇总 五:书籍推荐 六:关于阅读技术书籍的经验 七:总结 一:引言 因为工作调整,从PHP开发零基础转型到.NET开发,前期没有太多空闲时间去系统学习.只好独辟蹊径,寻找快速掌握满足当前需求的方法,和大家分享: <一>:先搜集.NET平台重点知识点的概念名称,然后通过网络搜集该知识点的学习资料,尽可能宏观地了解这个全新技术体系的语法结构,涉及的编程练习题反复练习: <二>:逐行阅读工程源代码,再通过网络学习遇到的知

Linux学习笔记(十一)--命令学习(文件权限属性)

在进行新内容学习前,我们先把上面的内容简单的回顾下: 绝对路径:『一定由根目录 / 写起』:相对路径:『不是由 / 写起』 特殊目录有:., .., -, ~, ~account需要注意: 与目录相关的命令有:cd, mkdir, rmdir, pwd 等重要命令: rmdir 仅能删除空目录,要删除非空目录需使用『 rm -r 』命令: ls 可以检视文件的属性,尤其 -d, -a, -l 等选项特别重要! 文件的复制.删除.移动可以分别使用:cp, rm , mv等命令来操作: 检查文件的内

Android学习笔记(25):带动画效果的View切换ViewAnimator及其子类

ViewAnimator可以实现带动画效果的View切换,其派生的子类是一些带动画效果切换功能的组件. ViewAnimator支持的XML属性: Attribute Name Description android:animateFirstView 设置显示第一个View组件时是否使用动画 android:inAnimation 设置显示组件时使用的动画 android:outAnimation 设置隐藏组件时使用的动画 1. ViewSwitcher视图切换组件. 添加视图的方法: 由Vie

[爬虫学习笔记]MemoryCache缓存的用法学习

      在完成了DNS解析模块之后,我意识到了DNS缓存机制也很有必要.在Redis,Memcache,和.Net自带的Cache之间,考虑到部署问题,最终选择了后者,之前在学习Web及开发的过程中用过System.Web.Caching.Cache这个类库,但是这次的爬虫程序我打算部署为桌面软件,所以选用了System.Runtime.Caching.MemoryCache(后期如有必要也会加入System.Web.Caching.Cache来适配Web端程序).       Memory

Tensorflow学习笔记3:TensorBoard可视化学习

TensorBoard简介 Tensorflow发布包中提供了TensorBoard,用于展示Tensorflow任务在计算过程中的Graph.定量指标图以及附加数据.大致的效果如下所示, TensorBoard工作机制 TensorBoard 通过读取 TensorFlow 的事件文件来运行.TensorFlow 的事件文件包括了你会在 TensorFlow 运行中涉及到的主要数据.关于TensorBoard的详细介绍请参考TensorBoard:可视化学习.下面做个简单介绍. Tensorf