【问题标题】:Here the answer is 75. So, Why 25 is multiplying with 3 here in this Scala program?答案是 75。那么,为什么在这个 Scala 程序中 25 与 3 相乘?
【发布时间】:2017-07-17 14:34:13
【问题描述】:

我刚开始学习 Scala,在这个 Scala 程序中,答案是 75。为什么?为什么 25 与 3 相乘?我无法理解“println(fun(a))”部分

object MainObject 
    {  
       def main(args: Array[String]) = 
       {  
         functionExample(25, bhaskar)  // Passing a function as parameter  
       }  
        def functionExample(a:Int, fun:Int=>AnyVal):Unit=
        {  
            println(fun(a))            // 75
        }  
        def bhaskar(b:Int):Int = 
        {  
            b*3  

        }  
    }

【问题讨论】:

  • fun:Int=>AnyVal 是方法 functionExample 的参数。在 main 中,您调用 functionExample 并将 fun 参数作为 bhaskar。所以 println(fun(a)) 行打印了 fun(a) 的结果。 a 是 25 岁,有趣的是 bhaskar。 bhaskar 返回 a*3。
  • 好的,谢谢!但是 bhaskar 如何返回 a*3?它返回 b*3。不能后悔
  • bhaskar 接受一个参数 b,它是一个 int。在 functionExample 中调用它时,将 a 作为参数传递。所以 b=a,然后返回 b*3。
  • 是的!谢谢!知道了! :)

标签: scala higher-order-functions


【解决方案1】:

println(fun(a)) 打印调用fun(a) 的结果。当您调用functionExample(25, bhaskar) 时,您将25 作为abhaskar 作为fun 传递。 bhaskar 接受 Int 并返回乘以 3

因此,调用bhaskar(25) 的结果是75。由于funbhaskara25fun(a) 导致75

【讨论】:

  • 非常感谢!但是 bhaskar 是如何获得 Int 25 的呢?因为 25 是第一个参数,而 bhaskar 是第二个参数。在 bhaskar(b:Int) 的实现部分,这里 b 是一个以前从未使用过的变量
  • 因为,当你调用函数时,你传入了 25 作为 a,而 bhaskar 作为 fun。所以 fun(a) 与 bhaskar(25) 相同。 bhaskar 在输入值中将其乘以 3 并返回该结果。 b 是 bhaskar 的参数名称,它是方法本地的。
  • 是的。知道了。谢谢!
猜你喜欢
  • 2020-02-15
  • 2018-09-21
  • 2015-02-21
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多