Scala中的参数

Posted effe技术空间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala中的参数相关的知识,希望对你有一定的参考价值。

   

    1. By-value和By-name参数



    这两者的区别是,By-value会在调用函数之前计算一次参数值,而By-name是在每次调用函数的时候重新计算参数值。

Scala中的参数

Scala中的参数

    执行的结果大家可以想到

Scala中的参数

    接下来我们只需要将counts函数的参数改成By-value参数

Scala中的参数

Scala中的参数

    可以看到结果就不一样了,原因就是By-value只在调用函数之前对参数进行一次求值,而By-name在每次调用函数时会重新计算参数。

    基于By-name参数的这个特性,我们可以在以下情形下用到它。

    1. 对未使用的参数避免求值

    因为一个函数可能不会用到所有的参数,如果使用By-name参数,那么就可以节省下计算参数的开销。在一些对性能比较敏感的场景会有一定效果。



Scala中的参数

    可以知道第一次调用log函数时,会正常打印出Hello, world!。但是在第二次调用时,因为level < logLevel,所以不会去计算msg,因此也不会打印任何信息。

    2. 计算时延

Scala中的参数

Scala中的参数

    可以利用By-value参数延时求值的特性计算f函数的执行时间。



Scala中的参数

    2. 隐式参数

    隐式参数是指调用函数时根据implicit关键词自动从上下文获取的参数,这样能让代码更加简洁。

    我们在multiply函数中定义了一个隐式参数,它没有接收到任何参数传递,因此编译器会自动在上下文找到隐式参数并传递给multiply函数,并得到最后结果30.

    我们会在官方库看到很多隐式参数的例子,还有一点值得注意的是一个函数只能有一个隐式关键词。




参考资料:

  1.  https://www.geeksforgeeks.org/

  2. Hands-on Scala Programming,  Li HAOYI

  3. https://alvinalexander.com/scala/what-is-context-parameter-in-dotty-scala-3/

以上是关于Scala中的参数的主要内容,如果未能解决你的问题,请参考以下文章

Scala中的参数

如何将参数传递给scala中的方法

Play/Scala 中的隐式参数和组合视图

Scala使用匿名类主体中的空格调用单参数方法

scala中的传名调用

Scala隐式参数