1. 程式人生 > >scala自學日記(2)-使用Scala直譯器(interpreter)

scala自學日記(2)-使用Scala直譯器(interpreter)

上一篇裡面我們介紹瞭如何安裝scala以及如何的配置環境變數

接下來我們就介紹下如何使用直譯器來編寫簡單的scala程式碼

開啟控制檯,進入scala開發模式:

[email protected]:~$ scala
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_26).
Type in expressions to have them evaluated.
Type :help for more information.


scala> 


1.簡單的輸出

scala> 1+2
res0: Int = 3


直接輸入 1 + 2 ,返回res0: Int = 3

res0表示變數名, Int表示型別, 3是值。

Scala的型別定義在冒號後面,和java放在前面不同,和UML類圖的屬性定義方式一樣。

Scala是強型別語言,必須要定義型別,但Scala編譯器足夠聰明,他能夠根據你的值幫你定義變數的型別。

這裡res0是個變數名,所以你可以接下來再使用。


2.再次簡單測試

scala> res0*3
res1: Int = 9
直譯器又給了一個變數res1。
Scala的所有變數都是物件,所有操作都是方法。
所以*也是方法,你可以這樣呼叫

scala> res0.*(res1)
res2: Int = 27
3.簡單的輸出資訊

scala> println("Test msg!")
Test msg!

這個println是個方法,因為Scala有預定義匯入一些類,所以可以直接使用。

4.定義變數

Scala有兩種型別的變數,val 和var 。

val 變數的值只能初始化一次,再次賦值就發生錯誤,var就和java的變數相同,可以隨時修改。
val 是函數語言程式設計的風格,變數一旦賦值就不要再做修改,從程式上將有很多好處,但有時候做起來會比較繞。

val:

scala> val msg:String="Hello world!"
msg: String = Hello world!

scala> msg="sssss"
<console>:8: error: reassignment to val
       msg="sssss"
          ^
var:
scala> var msg2="Hello world!2"
msg2: java.lang.String = Hello world!2

scala> msg2="ssssss"
msg2: java.lang.String = ssssss

scala> println(msg+";"+msg2)
Hello world!;ssssss
5.定義方法:
scala> def max(x: Int, y: Int): Int = if(x < y) y else x
max: (x: Int, y: Int)Int

scala> max(1,2)
res2: Int = 2

定義變數用val和var,定義方法用def 。
這個max方法有方法引數,返回值型別,方法體。麻雀雖小,五臟俱全了。

Scala的變量表示是變數名: 型別 ,這一點和java甚至其他語言都很不同,和UML風格比較接近。

Scala中方法也是一個型別,或者說是一個值,成為First Class。
所以可以把max看成是個變數名,(Int,Int)Int是它的型別。他可以作為引數傳遞,也可以賦值給其他變數。

scala> val m=max _
m: (Int, Int) => Int = <function2>

scala> m(1,3)
res3: Int = 3

注意裡面的"_"不能省略,而且max和"_"之間有空格
 
OK,本篇到此結束。

相關推薦

scala自學日記(2)-使用Scala直譯器(interpreter)

上一篇裡面我們介紹瞭如何安裝scala以及如何的配置環境變數 接下來我們就介紹下如何使用直譯器來編寫簡單的scala程式碼 開啟控制檯,進入scala開發模式: [email protected]:~$ scala Welcome to Scala versio

scala自學日記(5)-scala方法的定義方式

初次 接觸到scala發現scala定義方法的方式和java有很大的區別 1.下面是我寫的一個測試scala方法定義的demo. package com.scala.demo object FunctionDemo {    //定義方法1   def functio

scala自學日記(6)-陣列的初始化以及迴圈

1.scala裡面的陣列和java裡面的比較類似,但是又有些不同,陣列的初始化方法比java裡面多了一種方式,具體如下: 程式碼如下: package com.scala.demo /** * 這裡主要介紹陣列的使用 */ object ArrayDemo2 {

Scala學習1.2 Scala中Array Map等資料結構實戰

object Scala_study2 { def main(args: Array[String]): Unit = { /* 1.2.1 定長陣列和可變陣列 scala中陣列分為定長陣列和可變陣列.預設情況下是不可變(Immutable)陣

spark快速開發之scala基礎之2控制流程

seq ack size exceptio array 三元 選擇 tar trac 判斷結構 大體與java相當。scala沒有三元表達式。 val num = if(1>0) 1 else 0 //相當於匿名函數 println(num)

2.Scala陣列

package scala object ArrayTest { def main(args: Array[String]): Unit = { //1.定長陣列Array //一種定長陣列定義方式 //複雜物件型別在陣列定義時被初始化為null,數值型被初始化為0

話說模式匹配(2) scala裡是怎麼實現的?

在這篇martin和另外兩位模式匹配領域專家的論文裡說了模式匹配的幾種實現方式,以及scala是選擇哪種方式來實現的。 http://lampwww.epfl.ch/~emir/written/MatchingObjectsWithPatterns-TR.pdf 我引用了裡面的一些描述。 在面

Scala學習筆記2

===控制結構       scala和其他程式語言有一個根本性差異:在scala中,幾乎所有構造出來的語法結構都有值。這個特性使得程式結構更加精簡。scala內建的控制結構很少,僅有if、while、for、try、match和函式呼叫等而已。如此之少的理由是,scala

大資料學習-scala作業(2

package com.jn.spark.lesson1 import scala.collection.mutable.ArrayBuffer /**  * 作業1:移除一個數組中第一個負數後的所有負數,(第一個負數要保留,其餘的負數都刪除)  * @author 江

scala 隨筆(2scala建構函式 this

scala裡面的方法定義先於執行體載入,所以下面問題是沒有問題的 ,println(f) 先於定義 object Constructor { class Test{ println(f); def f = { "I am here!!!" }

Spark 1.5.2(Scala 2.11)版本的編譯與安裝

Spark於11月9號又將幾個BUG解決之後,release一個較新的版本。作為spark的追隨者,於是開始重新進行spark的編譯。 有了前面的編譯經驗和之前下載好的java類包,花了大概一分鐘就編譯妥當,於是重新部署配置一下,馬上OK。簡直是高效率。 對於scala

Scala-Unit-2-Scala基礎語法1

一、Scala程式的開始->HelloScala   這裡的操作如同java的helloworld程式,直接放程式碼! object HelloScala{ def main(args:Array[String]){ println("HelloScala")

scala-Unit-3-Scala基礎語法2

一、定義方法、函式、及方法轉換為函式   1.方法的定義:     def  方法名(引數1:資料型別,引數2:資料型別...):返回值型別 ={       }   2.定義函式:     val h1 = (a:Int,b:Int) => {a * b}   3.方

ubuntu 14.04 下單機安裝 hadoop 2.7.2+scala 2.11.8+spark 2.0偽分散式教程

一.安裝java 將java下載後手動解壓到/home/che資料夾下(可採用右擊壓縮包,單擊“提取”) 在終端(可用Ctrl+Alt+T快捷鍵開啟)中輸入: sudo gedit /etc/profile 在開啟的文字中新增: expor

Chisel 語言(Scala)學習 2 例項化模型和向量操作

Chisel 語言學習 2 例項化模型和向量操作 系列文章主要用來記錄學習Chisel和scala過程中遇到的難點或知識點 例項化模型: 帶有進位的加法器 Chisel程式碼如下:

9.2 scala函式 list map 元組

基礎語法TestFunc.scala:package com.scalaobject TestFunc {//預設值函式def sayMyName(name : String = "Jack"){  p

Scala Type Parameters 2

型別關係 Scala 支援在泛型類上使用型變註釋,用來表示複雜型別、組合型別的子型別關係間的相關性 協變 +T,變化方向相

scala 基礎十二 scala apply的使用,工廠方法和單例模式的實現

定義 其他 返回 pack 新的 true 伴生對象 args null 1. apply 可以用來實現類似於靜態的初始化類的實例,請看下面實例 package smart.iot class applyclass { } class A {

php學習日記2(關於php中的符號->、=>和::的意思)

常用 如果 count left 部分 之間 大於等於 ech repl ‘- >’符號是“插入式解引用操作符”(infix dereference operator)。換句話說,它是調用由引用傳遞參數的子程序的方法(當然,還有其它的作用)。正如我們上面所提到的,在調

Python自學day-2

deepcopy rfi 技術 參數 元組 board leo 常用 下標索引 一、模塊 模塊分兩種:標準庫和第三方庫,標準庫是不需要安裝就可以使用的庫。 import [模塊名]:導入一個庫,優先是在項目路徑中尋找。自定義模塊名不要和標準庫模塊名相同。