Scala:访问修饰符、运算符和循环
http://blog.csdn.net/pipisorry/article/details/52902234
Scala 访问修饰符
Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。
如果没有指定访问修饰符符,默认情况下,Scala对象的访问级别都是 public。
Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。
私有(Private)成员
用private关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。
class Outer{class Inner{private def f(){println("f")}class InnerMost{f() // 正确}}(new Inner).f() //错误 }
(new Inner).f( ) 访问不合法是因为 f 在 Inner 中被声明为 private,而访问不在类Inner之内。
但在 InnerMost 里访问f就没有问题的,因为这个访问包含在 Inner 类之内。
Java中允许这两种访问,因为它允许外部类访问内部类的私有成员。
保护(Protected)成员
在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。因为它只允许保护成员在定义了该成员的的类的子类中被访问。而在java中,用protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。
package p{class Super{protected def f() {println("f")}}class Sub extends Super{f()}class Other{(new Super).f() //错误} }
上例中,Sub 类对 f 的访问没有问题,因为 f 在 Super 中被声明为 protected,而 Sub 是 Super 的子类。相反,Other 对 f 的访问不被允许,因为 other 没有继承自 Super。而后者在 java 里同样被认可,因为 Other 与 Sub 在同一包里。
公共(Public)成员
Scala中,如果没有指定任何的修饰符,则默认为 public。这样的成员在任何地方都可以被访问。
class Outer {class Inner {def f() { println("f") }class InnerMost {f() // 正确}}(new Inner).f() // 正确因为 f() 是 public }
作用域保护
Scala中,访问修饰符可以通过使用限定词强调。格式为:
private[x] 或 protected[x]
这里的x指代某个所属的包、类或单例对象。如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。
这种技巧在横跨了若干包的大型项目中非常有用,它允许你定义一些在你项目的若干子包中可见但对于项目外部的客户却始终不可见的东西。
package bobsrocckets{package navigation{private[bobsrockets] class Navigator{protected[navigation] def useStarChart(){}class LegOfJourney{private[Navigator] val distance = 100}private[this] var speed = 200}}package launch{import navigation._object Vehicle{private[launch] val guide = new Navigator}} }
上述例子中,类Navigator被标记为private[bobsrockets]就是说这个类对包含在bobsrockets包里的所有的类和对象可见。
比如说,从Vehicle对象里对Navigator的访问是被允许的,因为对象Vehicle包含在包launch中,而launch包在bobsrockets中,相反,所有在包bobsrockets之外的代码都不能访问类Navigator。
皮皮blog
Scala运算符
Scala 中的按位运算法则
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
<< | 左移动运算符 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
>>> | 无符号右移 | A >>>2 输出结果 15, 二进制解释: 0000 1111 |
皮皮blog
Scala循环
for循环语法
Scala 语言中 for 循环的语法:
for( var x <- Range ){statement(s); }
以上语法中,Range 可以是一个数字区间表示 i to j ,或者 i until j。左箭头 <- 用于为变量 x 赋值。
实例
以下是一个使用了 i to j 语法(包含 j)的实例:
object Test {def main(args: Array[String]) {var a = 0;// for 循环for( a <- 1 to 10){println( "Value of a: " + a );}} }
以下是一个使用了 i until j 语法(不包含 j)的实例:
object Test {def main(args: Array[String]) {var a = 0;// for 循环for( a <- 1 until 10){println( "Value of a: " + a );}} }
for 循环集合
for 循环集合的语法如下:
for( var x <- List ){statement(s); }
以上语法中, List 变量是一个集合,for 循环会迭代所有集合的元素。
for 循环过滤
Scala 可以使用一个或多个 if 语句来过滤一些元素。
以下是在 for 循环中使用过滤器的语法。
for( var x <- Listif condition1; if condition2...){statement(s);
你可以使用分号(;)来为表达式添加一个或多个的过滤条件。
for 使用 yield
你可以将 for 循环的返回值作为一个变量存储。语法格式如下:
var retVal = for{ var x <- Listif condition1; if condition2... }yield x
注意大括号中用于保存变量和条件,retVal 是变量, 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。
以下实例演示了 for 循环中使用 yield:
object Test {def main(args: Array[String]) {var a = 0;val numList = List(1,2,3,4,5,6,7,8,9,10);// for 循环var retVal = for{ a <- numList if a != 3; if a < 8}yield a// 输出返回值for( a <- retVal){println( "Value of a: " + a );}} }
from: http://blog.csdn.net/pipisorry/article/details/52902234
ref: [Scala Tutorial]
Scala:访问修饰符、运算符和循环相关推荐
- scala 访问修饰符_Scala中的访问修饰符
scala 访问修饰符 Access modifiers are used in order to restrict the usage of a member function to a class ...
- scala 访问修饰符_Scala访问修饰符–私有,受保护的和公共的
scala 访问修饰符 The restriction of scope to certain places is realized with the help of access modifiers ...
- Scala基础教程(三):访问修饰符、运算符
包,类或对象的成员可以标记访问修饰符private和protected,如果我们不使用这两种关键字,那么访问将被默认设置为public.这些修饰 限制为成员的代码的某些区域访问.要使用访问修饰符,包括 ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- Java访问修饰符(访问控制符)
Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private bo ...
- 【小白学习C++ 教程】十一、C++类中访问修饰符
@Author:Runsen 类是面向对象编程.它是一种用户定义的数据类型,它拥有自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用它们. 一个对象是一个类的实例.定义类时,不会分配内存,但 ...
- c# 访问修饰符的访问权限
1. 访问修饰符. 指定声明的类型和类型成员的可访问性. (1) public:是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. (2) private:是一个成员 ...
- JAVA SE、EE、ME,JRE、JDK,基本数据类型,访问修饰符、函数、封装的概念、UML类图、构造方法、this关键字、static关键字、方法重载、方法重写、包(packahe)
运行第一个JAVA程序: 这里使用的开发环境是eclipse,新建一个java工程,然后可以看到src这个是存放java代码的地方,然后在src文件右击新建一个class(类),然后可以看到下图,同样 ...
- 语法基础(三. 类,属性,方法,方法重载,方法重写,构造方法,访问修饰符)
语法基础(三. 类,属性,方法,方法重载,方法重写,构造方法,访问修饰符) (如有错误,欢迎指正,感谢!) 类 类是面向对象的程序设计中的概念,实现信息的封装 概念: 类就是拥有相等行为和相同的属性的 ...
- Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制
目录 面向对象编程(中级部分) IDE(集成开发环境)-IDEA IDEA介绍 IDE(集成开发环境)-Eclipse Eclipse介绍 IDEA的安装 IDEA的基本介绍和使用 创建一个java项 ...
最新文章
- vim删除多行_Vim 可视化模式入门 | Linux 中国
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组缺口箱图(notch boxplot)实战
- 5、python学习之变量
- MATLAB 获取某个文件夹下所有文件夹或者文件的名字
- Django 表操作时 字段名为变量
- 图片缩放与目标值的规范
- 百度Android在线语音识别SDK用法
- 初识Jasima-Jasima中的建模对象
- JAVA环境变量的配置方法【希望可以帮助你】【个人实测没问题】
- 小榕flash管理器xp 是什么
- DIV布局鲜花超市网站设计——鲜花超市(4页) HTML+CSS+JavaScript HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作
- Ques1017勇者斗恶龙
- absolute 与overflow:hidden常见bug
- “电脑族”保健六项注意
- 算术左移、算术右移、逻辑右移
- 中国知网论文查重算法和修改攻略
- autojs之高德地图定位
- tp6+容联发送短信
- 郭博绘制的类似modbus的处理机制
- 运维经理:如果连CentOS网络配置都不会,就收包袱走人吧
热门文章
- 最好用的JQuery插件集合以及组合拳
- NSRunLoop NSTimer
- 【剑指Offer】46、圆圈中最后剩下的数
- pthread_cleanup_push()/pthread_cleanup_pop()的详解
- 每周进度条(第10周)
- c语言中的内存分配malloc、alloca、calloc、malloc、free、realloc、sbr
- 【转】Linq 求和,求平均值,求最大,求最小,分组,计数
- 【美团外卖】美食知识图谱的迭代及应用
- 【业界】火山翻译:工业级应用与研究
- 【论文分享】ACL 2020 信息抽取任务中的新动向