2014/06/13

Scala 試し

★IDE:
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. トレイト。トレイツ。BlackSchä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"