问答详情
源自:5-1 Scala 函数与匿名函数

匿名函传入某个高阶函数问题

第一种方式,高阶函数传入无参匿名函数时提示type mismatch:

http://img.mukewang.com/59a8c3bd0001291706740259.jpg

第二种方式,高阶函数传入有参匿名函数时,是正常的

http://img.mukewang.com/59a8c33000016c9410480311.jpg

老师能否解答一下这个问题,拿不准,是不是因为,Call-By-Name是语法和传入的无参函数在调用高阶函数时语法上面有冲突?那这个时候我如何去使这个能够传入一个无参的匿名函数呢?

  注:经测试显示定义的函数是可以传入不报错的,例如def anonymous = 10;

  http://img.mukewang.com/59a8c5110001d34e07660259.jpg

提问者:慕慕5134878 2017-09-01 10:25

个回答

  • 慕慕5134878
    2017-09-01 10:36:25

    刚才测试了一下:话不多说看代码:

    package scala.jeny

    object Greeting extends App {

        //定义一个无参匿名函数,返回一个Int类型,并使用变量anonymous接收

      val anonymous = () => 10;

      //定义一个加法函数,函数名为add,接受一个无参函数,并对这个函数进行两次计算并求和

      //可以说就是一个call-by-name的语法

      //这个点上可以传入无参函数,也可以传入一个表达式,个人认为前者就是后者包涵的部分

      def add(b:() => Int) = {

          b() + b();

      };

    println(add(anonymous));

    }