scala中的implict
1.作为隐式参数
object Test { def main(args: Array[String]) {
import FruitColor._
Fruit.get("apple")
}
} object Fruit{
def get(fruitName:String)(implicit fruitColor:String): Unit ={
println(s"$fruitName color is $fruitColor")
}
} object FruitColor{
implicit val color:String="red"
}
2 implict class
在类的可视范围内,主构造函数可以进行隐式转换。
限制:1.implict class必须定义在trait/class/object中
2.在构造函数中只能有一个非隐式的参数
3.在implict class的视界范围内,不能有同名的method、member和object。
object Main{
def main(args: Array[String]) {
import Helpers._
times println("test")
}
} object Helpers{
implicit class IntWithTimes(x:Int){
def times[A](f: => A): Unit ={
def loop(current:Int): Unit ={
if(current>){
f
loop(current-)
}
}
loop(x)
}
}
}
3.implict object
注意:隐式值不能在top-level的位置,需要作为一个member使用
object Main{ def sum[A](xs:List[A])(implicit m:Monoid[A]):A={
if(xs.isEmpty)m.unit
else m.add(xs.head,sum(xs.tail))
} implicit object IntMonoid extends Monoid[Int]{
def add(x:Int,y:Int):Int=x+y
def unit:Int=
} implicit object StringMonoid extends Monoid[String]{
override def unit:String = "" override def add(x: String, y: String): String = x concat y
} def main(args: Array[String]) {
println(sum(List(,,)))
println(sum(List("a","b","c")))
} } abstract class SemiGroup[A]{
def add(x:A,y:A):A
}
abstract class Monoid[A] extends SemiGroup[A]{
def unit:A
}
Reference:
1.http://docs.scala-lang.org/overviews/core/implicit-classes.html
2.http://docs.scala-lang.org/tutorials/tour/implicit-parameters.html
scala中的implict的更多相关文章
- Scala中使用implict 扩展现有类的方法
Scala中implict的一种用法就是扩展现有类的方法,有点类似于.Net中的扩展方法(MS对扩展方法的介绍:扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改 ...
- Scala中apply的用法
Scala中的 apply 方法有着不同的含义, 对于函数来说该方法意味着调用function本身, 以下说明摘自Programming in Scala, 3rd Edition Every fun ...
- scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...
- Scala中的None,Nothing,Null,Nil
在scala中这四个类型名称很类似,作用确实完全不同的. None是一个object,是Option的子类型,定义如下 case object None extends Option[Nothing] ...
- Scala中Iterator允许执行一次
背景 使用spark执行mapPartitionsWithIndex((index,iterator)=>{....}),在执行体中将iterator进行一次迭代后,再次根据iterator执行 ...
- 第52讲:Scala中路径依赖代码实战详解
今天学习了scala中的路径依赖,来看一下实战代码 class Outer{ private val x = 10 class Inner{ private val y = x +10 } ...
- 第51讲:Scala中链式调用风格的实现代码实战及其在Spark编程中的广泛运用
今天学习了下scala中的链式调用风格的实现,在spark编程中,我们经常会看到如下一段代码: sc.textFile("hdfs://......").flatMap(_.spl ...
- scala入门教程:scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...
- Scala 中object和class的区别
Scala中没有静态类型,但是有有“伴侣对象”,起到类似的作用. Scala中类对象中不可有静态变量和静态方法,但是提供了“伴侣对象”的功能:在和类的同一个文件中定义同名的Object对象:(须在同一 ...
随机推荐
- OC基础 NSData
OC基础 NSData 1.NSString转NSData //NSString转NSData NSString *string = @"abcd12345"; NSData *d ...
- MRC和ARC混编
iOS5.0以后就开始可以使用ARC( Automatic Reference Counting:自动引用计数)来代替之前的MRC(Manual Reference Counting:人工引用计数). ...
- 关于PagedDataSource,非常好用的一个分页属性!
Asp.net提供了三个功能强大的列表控件:DataGrid.DataList和Repeater控件,但其中只有DataGrid控件提供分页功能.相对DataGrid,DataList和Repeate ...
- (五)backbone - DEMO - 通信录改造之使用requirejs
DEMO介绍是 DEMO通信录的扩展,使用requirejs模块化整合 大体实现 • model文件 model/contact.js define(function (){ // user cont ...
- C/C++中new关键字是否加括号的区别
代码: #include <iostream> using namespace std; class A{ public: int a; }; int main(){ A *a1 = ne ...
- USB OTG to PC USB API简介
本API分为四部分:Linux或Android内核 (主要是gadget驱动).linux端API及其DEMO.Windows 驱动.Windows API及其Demo. 一.linux.Androi ...
- shell中的eval
eval语法 eval arg1 arg2 ... eval的作用就是将后面的参数arg1 arg2等等当成一个pipeline,然后重新执行shell处理pipeline的流程(有关pipeline ...
- Hadoop学习历程(四、运行一个真正的MapReduce程序)
上次的程序只是操作文件系统,本次运行一个真正的MapReduce程序. 运行的是官方提供的例子程序wordcount,这个例子类似其他程序的hello world. 1. 首先确认启动的正常:运行 s ...
- 文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式
本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述, ...
- Jetty9开发(1)
Version: 9.2.14.v20151106 Jetty : 开发文档 jetty的官网:http://www.eclipse.org/jetty/ Jetty : 开发文档 目录 I. je ...