(转)scala apply方法 笔记】的更多相关文章

在akka源码中有这样一个Cluster类. 使用方法是这样的:val cluster = Cluster(context.system); 作为scala菜鸟的我,并没有找到Cluster(system..)这个有参的构造方法.于是开始接着学习scala. Cluster是一个object单例对象. Scala比Java更面向对象的一个方面是Scala没有静态成员.替代品是,Scala有单例对象:singleton object. 当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象…
一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person { var name: String = _ /** * 从构造器 * @param name */ def this(name: String) = { this //注意:从构造器,必须先调用主构造器 this.name = name; } override def toString = { "…
当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖.请看下面一个简单的例子: class Foo(foo: String) {} object Foo { def apply(foo: String) : Foo = { new Foo(foo) } } 定义了一个Foo类,并且在这个类中,有一个伴生对象Foo,里面定义了apply方法. 有了这个apply方法以后,我们在调用这个Foo类的时候,用函数的方式来调用: object Client { def main…
class ApplyTest{ def apply() = "This apply is in class" def test{ println("test") } } //放在 object 对象中的方法都是静态方法 //由于 object 中的方法和属性都是静态的,所以就是单例的理想载体 //object 本身就是一个单例对象 object ApplyTest{ var count = 0 def apply() = new ApplyTest def sta…
摘抄两段话: 在明确了方法调用的接收者的情况下,若方法只有一个参数时,调用的时候就可以省略点及括号.如 " to ",实际完整调用是 ".to()".但 "println()" 不能写成 "println "",因为未写出方法调用的接收者 Console,所以可以写成 "Console println " 用括号传递给变量(对象)一个或多个参数时,Scala 会把它转换成对 apply 方法的调用…
package com.test.scala.test /** * apply 方法 */ object ApplyTest { def main(args: Array[String]): Unit = { //先看一个例子 var a1=Array(5) var a2=new Array(5) //对a1进行输出 for(i<-a1)println(i);//这输出5,大小为1 //对a2进行输出 for(i<-0 to a2.length)println(i);//这个是输出了a2的大小…
Scala中如果一个Class和一个Object同名,则称Class是Object的伴生类.Scala没有Java的Static修饰符,Object下的成员和方法都是静态的,类似于Java里面加了Static修饰符的成员和方法.Class和Object都可以定义自己的Apply()方法,类名()调用Object下的Apply()方法,变量名()调用Class下的Apply()方法. class ApplyTest{ def apply() { println("This is a class,…
1.Scala 方法及函数区别 ① Scala 有方法与函数,二者在语义上的区别很小.Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量.换句话来说在类中定义的函数即是方法 ② Scala 中的方法跟 Java 的类似,方法是组成类的一部分 ③ Scala 中的函数则是一个完整的对象,Scala 中的函数其实就是继承了 Trait 的类的对象 ④ Scala 中使用 val 语句可以定义函数,def 语句定义方法和函数 class Test { def method (x: Int…
class ApplyTest(val name:String) { /** * apply源码 * def apply(x: Int, xs: Int*): Array[Int] = { * val array = new Array[Int](xs.length + 1) * array(0) = x * var i = 1 * for (x <- xs.iterator) { array(i) = x; i += 1 } * array * } */ } /** * apply方法是sca…
学习前端也有一段时间了,但是效果甚微.利用时间不够充分,虽然是利用工作之余来学习.但是这不能成为我的借口. 今天学习了(其实看了很多遍)call apply方法. function abc(a,b){ return a + b; } function call1(num1,num2){ return abc.call(this,num1,num2); //call方法传递的参数方式为一个一个传递 } function apply1(num1,num2){ return abc.apply(thi…