scala高阶函数类型推断什么时候失效?
class TypeInfer(self: Int, other: Int) {
def test(num: Int, word: String, fun1: (Int, Int) => Int): Unit = {
fun1(self, other)
}
def test(word: String, num: Int, fun1: (Int, Int) => Int): Unit = {
fun1(self, other)
}
def test1(num: String, word: Int, fun1: Int): Unit = {
fun1(self, other)
}
def test1(num: Int, word: String, fun1: Int): Unit = {
fun1(self, other)
}
}
这段代码中的test()函数是有重载的,且以高阶函数为参数。当我们调用的时候必须指明高阶函数的参数类型。
def main(args: Array[String]): Unit = {
val num1:Int =
val num2:Int =
val num3:Int =
val infer = new TypeInfer(num1:Int,num2:Int)
infer.test(num3,"hi",(x:Int, y:Int)=>x+y)
//infer.test(num3,"hi",(x, y)=>x+y)
infer.test1(,"a",)
}
第6行是正确的,可以编译通过,但是第7行被注释的代码是不能编译通过的,也就是说这里类型推断失效了。经过测试发现,当有重载函数,且参数个数相同,且高阶函数所处的位置一样时,这时高阶函数类型推断会失效,在调用重载函数的时候必须像上述代码第6行那样显示指明高阶函数的类型。这是可以看出语法上是没有歧义的,按照正常思维是可以推断出高阶函数的类型的,但是为什么scala编译器不能做到呢?是bug?还是另有考虑?
scala高阶函数类型推断什么时候失效?的更多相关文章
- Scala高阶函数
1.作为参数的函数 函数可以作为一个参数传入到一个方法当中去 def main(args: Array[String]): Unit = { val myFunc1 =(x:Int) =>{ x ...
- Scala高阶函数与泛型
1. Scala中的函数 在Scala中,函数是“头等公民”,就和数字一样.可以在变量中存放函数,即:将函数作为变量的值(值函数). 2. scala中的匿名函数,即没有函数名称的函数,匿名函数常作为 ...
- Scala高阶函数实践
高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数):另外一种是返回值是函数的函数.package sparkCore/** * Created by zhen on 2018/3 ...
- Scala高阶函数示例
object Closure { def function1(n: Int): Int = { val multiplier = (i: Int, m: Int) => i * m multip ...
- Scala中的构造器和高阶函数
构造器 在定义类时可以定义主构造器.主构造器可以同时声明字段. /** * 主构造器 * @author Administrator */ //在scala中,类和方法交织在一起 class Test ...
- Scala - 快速学习08 - 函数式编程:高阶函数
函数式编程的崛起 函数式编程中的“值不可变性”避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为实参传递给另外一个函 ...
- spark快速开发之scala基础之5高阶函数,偏函数,闭包
高阶函数 高阶函数就是将函数作为参数或者返回值的函数. object function { def main(args: Array[String]): Unit = { println(test(f ...
- Scala学习十二——高阶函数
一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...
- 02.Scala高级特性:第6节 高阶函数;第7节 隐式转换和隐式参数
Scala高级特性 1. 课程目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特 ...
随机推荐
- 树莓派(raspberry pi)系统开发
[树莓派(raspberry pi)] 01.在linux环境下给树莓派安装系统及入门各种资料 [树莓派(raspberry pi)] 02.PI3安装openCV开发环境做图像识别(详细版) 出处: ...
- create index 与 alter table add index 区别
众所周知,MySQL创建索引有两种语法,即:ALTER TABLE HeadOfState ADD INDEX (LastName, FirstName);CREATE INDEX index_nam ...
- [DP题]采药
1775:采药 总时间限制:1000ms内存限制:65536kB 描述 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给 ...
- [转]使用Android-Studio 开发Android 程序
界面主题可以从这里下载:http://color-themes.com/ 杂七杂八(包含Android-Studio 自身):http://www.androiddevtools.cn/ genymo ...
- win7右下角的网络连接图标不见了~终极必杀技
1.打开程序管理器(ctrl+alt+delete) 2.在进程那里找到"explorer.exe",然后按结束进程(此时工具栏会消失) 3.然后在文件(程序管理器左上角),点击& ...
- jetty之嵌入式开发
一.Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可 ...
- py基础3--函数,递归,内置函数
本节内容 函数基本语法及特性 参数与局部变量 返回值 嵌套函数 递归 匿名函数 函数式编程介绍 高阶函数 内置函数 1. 函数基本语法及特性 背景提要 现在老板让你写一个监控程序,监控服务器的系统状况 ...
- 双系统(Windows+Ubuntu)重装Ubuntu后,修复引导
重装Ubuntu后,重启机器,Windows系统消失了.进入BIOS修改启动顺序,Windows系统恢复了,但是,刚装好的Ubuntu没了,一开机,电脑自动进入Windows. 解决办法: 用装系统的 ...
- 十三.jQuery源码解析之$.type()
512行:出现了一个class2type. 在jQuery中全局搜索这个变量. 这段代码的意思是将一串字符串通过空格分割成数组,并且使用each遍历数组来初始化class2type. 最终的结果应该是 ...
- 5月23日笔记-js绑定事件、解绑事件、复合事件
each() $("p").each(function(i,ele){ //alert(ele.innerHTML); alert($("p:eq("+i+&q ...