将方法作为参数传递而不将其转换为函数

时间:2015-06-04 13:23:54

标签: scala

我已经阅读了here关于scala中函数和方法之间的区别。它说方法可以比函数稍快。但是当使用m将方法m _作为参数传递时,m会隐式转换为函数。

  1. 性能差异是否足够重要,以便在我的程序成为瓶颈时考虑避免使用函数?
  2. 有没有办法将方法作为参数传递而不将其转换为函数?

3 个答案:

答案 0 :(得分:3)

  1. 2 无关。但总的来说,忘记性能,方法比函数声明更具可读性。在某些情况下,它们在编译器优化方面可能会快一些,但是:

  2. 如果不将方法转换为函数,则无法将方法作为参数传递。方法是一种特殊的语言结构,而不是一个对象本身。如果要将其用作对象,则必须使用eta-expansion将其转换为1.

答案 1 :(得分:1)

  1. 没有
  2. 否。在极少数情况下,这种微观性能非常重要,您需要传递方法所在的对象,并修改接收函数以接受该函数,或者使对象实现FunctionN之一接口,以便它可以用作函数。

答案 2 :(得分:0)

  1. 它避免使用函数和避免其他对象分配同样有意义。他们没什么特别的。

  2. 可以使用反射直接传递和调用方法,但性能会比在类似情况下传递函数更糟糕。