Scala underscore的用途
[comment]: # Scala underscore的用途
_ 的用途
// import all
import scala.io._
// import all, but hide Codec
import scala.io.{Codec => _, _}
// import all, but rename Codec as CodeA
import scala.io.{Codec => CodeA, _}
// import all from an object
import scala.io.Codec._
object Main {
// Higher kinded type parameter
import scala.language.higherKinds
class CollectionAdapter[T[_]] {
def getCollectionFromValue[A](a: A, f: A => T[A]): T[A] = {
f(a)
}
def intToList(a: Int): List[Int] = {
List(a)
}
}
def main(args: Array[String]): Unit = {
// Higher kinded type parameter
val adapter = new CollectionAdapter[List]()
println(adapter.getCollectionFromValue(1, adapter.intToList))
// output: List(1)
// Initialize a variable with default value
var i:Int = 0 // _ cannot be used in a function
println(i)
// output: 0
// Partial function application, Assign a function rather than run it.
def fun1(): Unit = {println("fun1 is invoked.")}
def obj1 = fun1 // run fun1 and return the result to obj1
// output: fun1 is invoked.
// output: ()
def fun2 = fun1 _ // assign fun1 to fun2
println(fun2)
// output: <function0>
// Anonymouse function, scala will infer it base on the context.
val list1 = (1 to 10)
println(list1.filter(_ > 5))
// output: Vector(6, 7, 8, 9, 10)
// equivalent to:
println(list1.filter(a => a > 5))
// output: Vector(6, 7, 8, 9, 10)
// setter function
class A {
private var _count = 0
// getter
def count = {_count}
// setter
def count_= (n: Int) = {_count = n}
// bang ??
def bang_! (n: Boolean) = {5}
}
val a = new A
a.count = 5
println(a.count)
// output: 5
// Pattern match
def matchTest(x: Any): String = x match {
case 1 => "one"
case 2 => "two"
case List(0, _, _) => "a list with three elements and the first element is 0"
case List(_*) => "a list with zero or more elements"
case _: Map[_, _] => "matches a map with any key type and any value type"
case _ => "anything else"
}
// anonymous variable. (or we can say ignored variable)
for (_ <- 1 to 2) {
println("hi")
}
// Sequence list2 is passed as multiple parameters to f(a: T*)
def fun3(a: Int*) = { a.map(println(_)) }
fun3(1 to 3: _*)
// output:
// 1
// 2
// 3
// Access tuple
var t = new Tuple3(1, "Two", "Three")
println(t._2)
// output: Two
}
}
参照
Scala underscore的用途的更多相关文章
- 学习Scala: 初学者应该了解的知识
Scala开发参照清单 这里列出在开发一个Scala工程中需要参照的资料. 官网网站 http://www.scala-lang.org/ 文档网站 http://docs.scala-lang.or ...
- 我的Machine Learning学习之路
从2016年年初,开始用python写一个简单的爬虫,帮我收集一些数据. 6月份,开始学习Machine Learning的相关知识. 9月开始学习Spark和Scala. 现在想,整理一下思路. 先 ...
- 【转载】 我的Machine Learning学习之路
原文地址: https://www.cnblogs.com/steven-yang/p/5857964.html ------------------------------------------- ...
- 你需要了解的JS框架
excanvas.js/Chart.js/cubism.js/d3.js/dc.js/dx.chartjs.js/echarts.js/flot.js 用途:构建数据统计图表,兼容多浏览器 ...
- 前端开发需要了解的JS插件
excanvas.js/Chart.js/cubism.js/d3.js/dc.js/dx.chartjs.js/echarts.js/flot.js 用途:构建数据统计图表,兼容多浏览器 jquer ...
- Backbone vs AngularJS
首先 Backbone 没有 AngularJS 那么容易上手. 而且作者并没有想让Backbone草根化的意思. Backbone 比喻成战斗机. 看上去更像是真正的MVC框架, model-vie ...
- Scala 中下划线的用途
转载自:https://my.oschina.net/leejun2005/blog/405305 Scala 作为一门函数式编程语言,对习惯了指令式编程语言的同学来说,会不大习惯,这里除了思维方式之 ...
- 浅谈 Scala 中下划线的用途
Scala 作为一门函数式编程语言,对习惯了指令式编程语言的同学来说,会不大习惯,这里除了思维方式之外,还有语法层面的,比如 underscore(下划线)就会出现在多种场合,令初学者相当疑惑,今天就 ...
- Scala:函数式编程之下划线underscore
http://blog.csdn.net/pipisorry/article/details/52913548 python参考[python函数式编程:apply, map, lambda和偏函数] ...
随机推荐
- 【Math】余弦相似度 和 Pearson相关系数
http://cucmakeit.github.io/2014/11/13/%E4%BF%AE%E6%AD%A3%E4%BD%99%E5%BC%A6%E7%9B%B8%E4%BC%BC%E5%BA%A ...
- 在SpringMVC中获取request对象的几种方式
1.最简单的方式(注解法) @Autowired private HttpServletRequest request; 2.最麻烦的方法 a. 在web.xml中配置一个监听 <listene ...
- Spring源码追踪2——xml解析入口
解析xml节点入口 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDe ...
- ITSEC TEAM 2013培训公开视频
信息安全·WEB安全培训 - 做最靠谱的WEB安全培训网站 http://edu.itsec.pw/ ITSEC TEAM 2013公开课视频 包含XSS.CCNA 视频截图: 视频连接:http: ...
- javascript 无语的==
今天面试不小心掉进坑了,大公司特别喜欢考javascript,而且专门挑很tricky的case. javascipt的==简直就是黑魔法,以前偷懒总是用,感觉也没有问题,可是准备面试就需要有寻根问底 ...
- 误删dpkg的/var/lib/dpkg/info文件夹的解决办法 zhuan
今天安装软件时时,出现这样的错误提示:E: Sub-process /usr/bin/dpkg returned an error code (1) 上网查解决方案,被网上误导,一不小心 ...
- Socket模型详解(转)
两种I/O模式 一.选择模型 二.异步选择 三.事件选择 四.重叠I/O模型 五.完成端口模型 五种I/O模型的比较 两种I/O模式 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待 ...
- 在使用sqlite时淌过的坑
以前一直用sqlite.net 1.0.66.0版本,在.net4下面程序写好了部署到目的地机器时winform程序总是出现缺少运行时的问题.有时装了运行时也还是出问题,后来发现是混合模式的问题,当时 ...
- struts2 using kindeditor upload pictures (including jmagic compressed images)
Project uses a kindeditor3.4 UploadContentImgAction @SuppressWarnings("serial") @ParentPac ...
- java计算当前周开始日期&结束日期
public static Date getFirstDayOfWeek(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDa ...