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高阶函数类型推断什么时候失效?的更多相关文章

  1. Scala高阶函数

    1.作为参数的函数 函数可以作为一个参数传入到一个方法当中去 def main(args: Array[String]): Unit = { val myFunc1 =(x:Int) =>{ x ...

  2. Scala高阶函数与泛型

    1. Scala中的函数 在Scala中,函数是“头等公民”,就和数字一样.可以在变量中存放函数,即:将函数作为变量的值(值函数). 2. scala中的匿名函数,即没有函数名称的函数,匿名函数常作为 ...

  3. Scala高阶函数实践

    高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数):另外一种是返回值是函数的函数.package sparkCore/** * Created by zhen on 2018/3 ...

  4. Scala高阶函数示例

    object Closure { def function1(n: Int): Int = { val multiplier = (i: Int, m: Int) => i * m multip ...

  5. Scala中的构造器和高阶函数

    构造器 在定义类时可以定义主构造器.主构造器可以同时声明字段. /** * 主构造器 * @author Administrator */ //在scala中,类和方法交织在一起 class Test ...

  6. Scala - 快速学习08 - 函数式编程:高阶函数

    函数式编程的崛起 函数式编程中的“值不可变性”避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为实参传递给另外一个函 ...

  7. spark快速开发之scala基础之5高阶函数,偏函数,闭包

    高阶函数 高阶函数就是将函数作为参数或者返回值的函数. object function { def main(args: Array[String]): Unit = { println(test(f ...

  8. Scala学习十二——高阶函数

    一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...

  9. 02.Scala高级特性:第6节 高阶函数;第7节 隐式转换和隐式参数

    Scala高级特性 1.    课程目标 1.1.   目标一:深入理解高阶函数 1.2.   目标二:深入理解隐式转换 2.    高阶函数 2.1.   概念 Scala混合了面向对象和函数式的特 ...

随机推荐

  1. Spring bean作用域

    全当知识要点记录了,大家随意踩踩. spring的作用域有以下几种singleton作用域prototype作用域request作用域session作用域global-session作用域 1. si ...

  2. centos6.5下tomcat安装

    1.安装JDK 安装:rpm –ivh jdk-7u5-linux-i586.rpm2.配置Tomcat 解压:tar -zxvf apache-tomcat-8.0.11.tar.gz 移动到/us ...

  3. 解决一个java facets问题

    经常被一个问题困扰: JavaServer Faces 2.2 can not be installed : One or more constraints have not been satisfi ...

  4. QT4.8.5环境移植到嵌入式平台

    QT4.8.5环境移植到嵌入式平台 参考:Qt移植到ARM Linux教程 http://www.veryarm.com/930.html 清除配置: sudo make confclean 配置: ...

  5. redhat 防火墙禁止允许的IP链接指定的端口

    编辑:iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.4.3 --dport 80 -j A ...

  6. WIN10下搭建react-native开发Android环境

    最近公司要求使用react-native进行移动端开发,据说macOS上开发坑会少的多,但我们是windows,莫法,直接抗吧!周末配置环境遇到很多问题,谨以此文做个记录... 准备 安装Chocol ...

  7. 用T4模版生成对应数据库表的实体类

    <#@ template debug="false" hostspecific="false" language="C#" #> ...

  8. hadoop-2.7.1:Error: Cannot find configuration directory: /etc/hadoop

    本文转载自:http://blog.csdn.net/huangshanchun/article/details/49533433 安装hadoop参考:http://blog.csdn.net/hi ...

  9. bzoj1215 24点游戏

    Description 为了培养小孩的计算能力,大人们经常给小孩玩这样的游戏:从1付扑克牌中任意抽出4张扑克,要小孩用“+”.“-”.“×”.“÷”和括号组成一个合法的表达式,并使表达式的值为24点. ...

  10. [转]JavaScript RegExp 对象参考手册

    JavaScript RegExp 对象参考手册 RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 直接量语法 /pattern/attributes 创建 ...