http://scala-ide.org/download/current.html
==>うわさは、、こいつはうまくいかない。。。。
★Scala imlicit value
Scala には implicit parameter という機能があります。
どういう機能かと言うと、引数に implicit という修飾子をつけると、関数呼び出しの際にその引数を省略することが可能になるというものです。
省略?で、JVMの値とか、OSから取れる値とか、コンパイラが適切なものを選択して解決してくれます
コンパイラが適切な値を選択できなかった場合、コンパイルエラーになります。
★scala scalac
scalac HelloWord.scala
==>HelloWorld.class
scala HelloWord
scala -cp . HelloWorld
Scalaでは、scalaコマンドによってクラスを実行する他に、対話型インタープリターとしてコマンドを入力して実行することが出来る。
==>REPL(Read Eval Print Loop)(Read=コマンド読み込み、Eval=解釈・実行、Print=結果表示、Loop=それらを繰り返す)
★trait===>こいつはinterfaceと理解する
trait Ord{
def < (that:Any):Boolean
def <= (that:Any):Boolean = (this<that) || (this==that)
def > (that:Any):Boolean= !(this <= that)
def >= (that:Any):Boolean= !(this < that)
}
==>maya...これは、抽象的に演算ね。。これはこの言語の特長?
42
=>The Scala interpreter reads the input 42, evaluates it
as an integer literal, creates an Int type object representing the number 42,res0 is the name of the variable created by the Scala interpreter
Int =42
res0
Int =42
・println is a function defined in scala.Console, which in turn
uses System.out.println to print messages to the console. Scala Predef
(part of the standard library) maps println to Console.println for you so
you don’t have to prefix it with Console when using it.
・val myList=new java.util.ArrayList[String]()
myList.
=>利用するメソッドの一覧が出る
・val var
A val is a single assignment variable, sometimes
called value. Once initialized a val can’t be changed or reassigned to some
other value。var is reassignable
・val first :: rest =list(1,2,3)
=> first: Int =1
rest: List[Int] = list(2,3)
・lazy val forLater = someTimeConsumingOperation()
==>時間かかる操作
・function==>戻り値は必須ではない。。自動判断である
You don’t have to specify the return keyword to return anything from the function. It will
return the value of the last expression.
★fuctionの定義
def toList[A](value:A) = List(value)
def max(a: Int, b: Int) = if(a > b) a else b
def myFirstMethod = "exciting times ahead"
def myFirstMethod(){ "exciting times ahead" }
def myFirstMethod() = { "exciting times ahead" }
★
val array= new Array[String](3)
array.foreach(println)
val oldList=List(1,2)
val newList=3::oldList
=>3.2,1
val myList = "This" :: "is" :: "immutable" :: Nil
★
for(file <- files) {
for(File file: files) {
for { a <- aList; b <- bList } println(a + b)
他は使う時、調べて良いと思う。。。
★df.format(now)
=>df format now
其实就是下面的这个冗长的表达式的简洁写法 df.format(now)
这看起来是一个语法细节,但是它导致一个重要的后果,我们将在下一节进行说明。
??????何??あの辺?
★为了解释为什么吧函数当作值进行操作是十分有用的,我们来考虑一个计时器函数。这个函数的目的是每隔一段时间就执行某些操作。那么如何吧我们要做的 操作传入计时器呢?于是我们想吧他当作一个函数。这种目前的函数对于经常进行用户界面编程的程序员来说是最熟悉的:注册一个回调函数以便在事件发生后得到 通知。
def main(args: Array[String]) {
oncePerSecond(() => println("time
files like an arrow"));
}
=>匿名函数使用了一个箭头(=>)吧他的参数列表和代码分开。在这里参数列表是空的,所以我们在右箭头的左边写上了一对空括号
★Scala中的类可以拥有参数,这样就可以得出我们下面关于对复数类(Complex)的定义:
class Complex(real: Double, imaginary: Double) {
def re() = real
def im() = imaginary
}
==>all is class,fuciton も、だから、みんなは一緒で、大きな差がない。
看看上面的定义,跟一个函数没有什么在的区别吗!
val c = new Complex(1.2, 3.4)
println("imaginary part:" + c.im);
defè関数、クラス
val 変数
★Traits. トレイト。トレイツ。Black、Schärli らが提唱し、Squeak
Smalltalk で実装を試み、その実効性を確かめた多重継承機構。
★Scala中的所有类都继承一个父类,当没有显示声明父类时(就像上面定义的Complex一样),它们的父类隐形指定为scala.AnyRef。
override def toString() =
"" + re + im
=>在子类中覆盖父类的成员是可能的。但是你需要通过override修饰符显示指定成员的覆盖
★def eval(t: Tree, env: Environment): Int = t match {
case Sum(l, r) => eval(l, env) + eval(r, env)
case Var(n) => env(n)
case Const(v) => v
} ==>模式匹配的基本思想就是试图对一个值进行多种模式的匹配,并且在匹配的同时将匹配值拆分成若干子项,最后对匹配值与其子项执行某些代码
==>物と操作の関係、どちをメインにする?
1. 当你使用成员函数时,你可以通过继承Tree从而很容易的添加新的节点类型,但是另外一方面,添加新的操作也是很繁杂的工作,因为你不得不修改Tree的所有子类。
2. 当你使用模式匹配是,形势正好逆转过来,添加新的节点类型要求你修改所有的对树使用模式匹配的函数,但是另一方面,添加一个新的操作只需要再添加一个模式匹配函数就可以了
★class Reference[T] {
private var contents: T = _
def set(value: T) { contents = value }
def get: T = contents
}
======>はデフォルト値の意味!!
★def welcome(name: String) :String = {"Exciting times
ahead" + name}
The return type of a
Scala function is optional because Scala infers the return type of a function
automatically.
def max(a: Int, b: Int) = if(a > b) a else b
def myFirstMethod = "exciting times ahead"