Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Scala underscore的用途

Scala underscore的用途

作者头像
绿巨人
发布于 2018-05-16 09:43:52
发布于 2018-05-16 09:43:52
1.6K00
代码可运行
举报
文章被收录于专栏:绿巨人专栏绿巨人专栏
运行总次数:0
代码可运行

_ 的用途

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 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
    }
}

参照

  • Community-driven documentation for Scala
  • Scala _ [underscore] magic
  • Scala Underscore
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-09-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
浅谈 Scala 中下划线的用途
Scala 作为一门函数式编程语言,对习惯了指令式编程语言的同学来说,会不大习惯,这里除了思维方式之外,还有语法层面的,比如 underscore(下划线)就会出现在多种场合,令初学者相当疑惑,今天就来总结下 Scala 中下划线的用法。 1、存在性类型:Existential types def foo(l: List[Option[_]]) = ... 2、高阶类型参数:Higher kinded type parameters case class A[K[_],T](a: K[T]) 3、临时变
用户1177713
2018/02/24
7300
【Scala篇】--Scala中的函数
Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明。
LhWorld哥陪你聊算法
2018/09/13
1.9K0
【Scala篇】--Scala中的函数
scala与java之间的那些事
  scala与java之间的关系,我认为可以用一句话来开头:scala来源于java,但又高于java。   scala的设计者Martin Odersky就是一个JAVA控,这位牛人设计了javac和编写了jdk中的通用代码。可以说java语言本身就是Martin Odersky一步一步看着长大的。所以scala可以说打根起就和JAVA有着远远悠长的血缘关系。   Martin Odersky还在写java那会,就立志开发达成一个目标:让写程序这样一个基础工作变得高效、简单、且令人愉悦!因此可以说sca
随机来个数
2018/04/16
1K0
Scala——多范式, 可伸缩, 类似Java的编程语言
3.将features和plugins两个文件夹拷贝到eclipse安装目录中的” dropins/scala”目录下。进入dropins,新建scala文件夹,将两个文件夹拷贝到“dropins/scala”下
时间静止不是简史
2020/07/24
3.4K2
Scala中的方法与函数
封装是计算机编程语言中最基本但也十分经典的思想(更严谨地说封装是面向对象设计中的一种思想),例如将一段频繁用到的逻辑写成一个函数的过程,其背后蕴含的其实就是封装的思想。与众多编程语言类似,Scala中也提供了方法和函数的功能,但在具体使用上又有很多特别之处,甚至一定程度上可以彰显Scala的设计理念。
luanhz
2021/03/04
1.3K0
Scala中的方法与函数
两天了解scala
根据文章内容撰写摘要总结。
用户1148523
2018/01/09
6870
两天了解scala
隐式转换函数_隐函数可以转化为显函数
隐式转换函数(implicit conversion function)是以implicit关键字声明的带有单个参数的函数,这样的函数将被自动应用,将值从一种类型转换为另一种类型。隐式转换函数叫什么名字是无所谓的,因为通常不会由用户手动调用,而是由Scala进行调用。但是如果要使用隐式转换,则需要对隐式转换函数进行导入。因此通常建议将隐式转换函数的名称命名为“one2one”的形式。 scala会考虑如下位置的隐式转换函数:
全栈程序员站长
2022/09/27
1K0
Scala类型推导Scala类型推导
根据Picrce的说法:“类型系统是一个可以根据代码段计算出来的值对它们进行分类,然后通过语法的手段来自动检测程序错误的系统。”
一个会写诗的程序员
2018/08/20
2.7K0
学习笔记-小甲鱼Python3学习第十九
局部变量(Local Variable):在整个py文件中声明,全局范围内都可以调用
py3study
2020/01/06
6440
scala 语法深析
scala是一种基于JVM的编程语言,spark框架是使用scala语言编写的,要阅读源码就必须掌握scala,虽然spark可以采用java和python进行开发,但是最快速的支持方式任然是scala方式的API.
Tim在路上
2020/08/04
7690
时间都去哪儿了--python性能优化
当自动化测试的量特别大的时候,python性能就显得尤为重要。 往往高手和菜鸟的区别在性能上体现出来了。
赵云龙龙
2020/10/09
8220
scala(二十一) 模式匹配(match)
为了获取里面的数据,需要写成这样的形式e._2._2._2._1;开发时也许还知道各个._2 是什么,但是过一段时间,可能就忘了,此种方式出现的问题就是可读性极差。
用户1483438
2022/04/22
9260
python笔记73-动态导入模块import_module 和 重载reload
前言 python动态加载import_module 和 重载reload 的使用 python环境:V3.6.x import_module 当我们在运行一段程序,根据需要动态加载一个模块,调用里面的方法时,除了平台使用的import module,也可以在代码里面用到import_module方法。 比如我有个模块 yoyo.py,里面写了个函数 def fun1(): return "hello world" def fun2(): return "上海-悠悠" a.py 需要加载y
上海-悠悠
2022/04/02
1.6K0
100天精通Golang(基础入门篇)——第17天:深入解析Go语言中的指针
本篇文章主要深入解析Go语言中的指针,从指针的概念、获取变量地址,声明指针,空指针,获取指针的值,操作指针改变变量的数值,使用指针传递函数的参数,以及指针的指针等方面进行讲解和示例演示。
猫头虎
2024/04/08
2000
100天精通Golang(基础入门篇)——第17天:深入解析Go语言中的指针
Scala学习笔记
大数据框架(处理海量数据/处理实时流式数据) 一:以hadoop2.X为体系的海量数据处理框架         离线数据分析,往往分析的是N+1的数据         - Mapreduce             并行计算,分而治之             - HDFS(分布式存储数据)             - Yarn(分布式资源管理和任务调度)             缺点:                 磁盘,依赖性太高(io)                 shuffle过程,map将数据写入到本次磁盘,reduce通过网络的方式将map task任务产生到HDFS         - Hive 数据仓库的工具             底层调用Mapreduce             impala         - Sqoop             桥梁:RDBMS(关系型数据库)- > HDFS/Hive                   HDFS/Hive -> RDBMS(关系型数据库)         - HBASE             列式Nosql数据库,大数据的分布式数据库  二:以Storm为体系的实时流式处理框架         Jstorm(Java编写)         实时数据分析 -》进行实时分析         应用场景:             电商平台: 双11大屏             实时交通监控             导航系统  三:以Spark为体系的数据处理框架         基于内存            将数据的中间结果放入到内存中(2014年递交给Apache,国内四年时间发展的非常好)         核心编程:             Spark Core:RDD(弹性分布式数据集),类似于Mapreduce             Spark SQL:Hive             Spark Streaming:Storm         高级编程:             机器学习、深度学习、人工智能             SparkGraphx             SparkMLlib             Spark on R Flink
曼路
2018/10/18
2.9K0
2018-11-29 java和dll交互
参考文章《JNA:JAVA调用DLL 超详细代码实战》和《JNA Examples》实现了java和c实现的dll相互调用,细节如下:
oracle3
2022/05/13
3600
TypeScript 疑难杂症
作者:阿伟 - 身在高楼心在北大荒,我就这副死样~https://zhuanlan.zhihu.com/p/82459341
ConardLi
2019/09/25
2.1K0
TypeScript 疑难杂症
this,call,apply,bind(万字长文)
前言 大家好啊,我是吒儿?,每天努力一点点?,就能升职加薪?当上总经理出任CEO迎娶白富美走上人生巅峰?,想想还有点小激动呢?。 这是我的第13期文章内容✍,希望能够把每一处知识点,说明白,(当然,如
达达前端
2020/06/16
1.3K0
Scala入门篇 顶
scala> val a = println("ddd") ddd a: Unit = ()
算法之名
2019/08/21
5110
Scala入门篇
                                                                            顶
浅谈自执行函数(立即调用的函数表达式)
既然函数名加上括号fun1()就是执行函数。 思考:直接取赋值符号右侧的内容直接加个括号,是否也能执行? 试验如下,直接加上小括弧:
celineWong7
2020/11/05
3.8K0
相关推荐
浅谈 Scala 中下划线的用途
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档