scala学习笔记01

来源:互联网 发布:棋牌软件开发公司 编辑:程序博客网 时间:2024/05/17 01:14
编辑器:IntelliJ IDEA

新建项目:project->Non-SBT项目。

新建Scala Class->Kind选择Object。


HelloWorld代码:

  1. object HelloWorld {  
  2.   def main(args: Array[String]) {  
  3.     var msg: String = "Hello World!";  
  4.     print(msg);  
  5.   }  
  6. }  

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

val和var:

Scala有两种变量,val和var。val类似于Java里的final变量。一旦初始化了,val就不能再赋值了。与之对应的,var如同Java里面的非final变量。var可以在它生命周期中被多次赋值。


-------------------------------------------------------------------------------------------------------------------------------------------------------------------


函数调用,代码示例:

  1. object MaxNum {  
  2.   def main(args: Array[String]) {  
  3.     println(max(3,5));  
  4.     greet();  
  5.   }  
  6.   
  7.   def max(x: Int, y: Int):Int={  
  8.     if(x>y) x  
  9.     else y;  
  10.   }  
  11.   
  12.   def greet()={  
  13.     println("HelloWorld");  
  14.   }  
  15. }  

*在max参数列表的括号之后你会看到另一个“: Int”类型标注。这个东西定义了max函数的结果类型:result type。

* 如果函数仅由一个句子组成,你可以可选地不写大括号。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------


While循环,代码示例:

  1. def whileTest()={  
  2.   val array = new Array[Int](3);  
  3.   array(0)=1;  
  4.   array(1)=2;  
  5.   array(2)=3;  
  6.   var i = 0;  
  7.   while(i < array.length){  
  8.     println(array(i));  
  9.     i+=1;  
  10.   }  
  11. }  


*i += 1,让i自增一。注意Java的++i和i++在Scala里不起作用,要在Scala里自增,必须写成要么i = i + 1,或者i += 1。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------


foreach循环,代码示例:

  1. def forEachTest()={  
  2.   
  3.   Array(1,2,3).foreach((a: Int) => print(a + " "));  
  4.   println();  
  5.   
  6.   Array(1,2,3).foreach(print);  
  7.   println();  
  8.   
  9.   //此处输出为:333435。+‘ ’后,默认转化未char类型了。  
  10.   Array(1,2,3).foreach((a: Int) => print(a + ' '));  
  11.   println();  
  12.   
  13.   "hello".foreach((s: Char) => print(s + " "));  
  14.   println();  
  15. }  

*这段代码:Array(1,2,3).foreach(print);,有点意思~

-------------------------------------------------------------------------------------------------------------------------------------------------------------------


for循环,代码示例:

  1. def forTest(){  
  2.   for(a <- Array(1,2,3)){  
  3.     print(a + " ");  
  4.   }  
  5. }  

或者:

  1. val array = Array(1,2,3);  
  2. for(i <- 0 to 2){  
  3.   print(array(i) + "");  
  4. }  


*这个for表达式的第一行代码演示了Scala的另一个通用规则:如果方法仅带一个参数,你可以不带点或括号的调用它。本例中的to实际上是带一个Int参数的方法。代码0 to 2被转换成方法调用(0).to(2)。

*从技术上讲,Scala没有操作符重载,因为它根本没有传统意义上的操作符。取而代之的是,诸如+,-,*和/这样的字符可以用来做方法名。因此,当第一步里你在Scala解释器里输入1 + 2,你实际上正在Int对象1上调用一个名为+的方法,并把2当作参数传给它。

*这里对array(i)的访问时,Scala会自动转化成对名为apply的方法的调用,即:array.apply(i)。所以数组访问和其他的一般方法的访问并没有什么区别。这个原则不仅仅局限于数组:任何对某些在括号中的参数的对象的应用将都被转换为对apply方法的调用。当然前提是这个类型实际定义过apply方法。所以这不是一个特例,而是一个通则。

*同样,对array(i)赋值时,Scala会自动转化成对名为update的方法的调用,即:array.update(0,1)。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------


参考于《Scala编程》。1、2章内容。

0 0
原创粉丝点击