【问题标题】:Is method parameter forwarding possible in Scala?Scala中是否可以进行方法参数转发?
【发布时间】:2011-11-22 17:14:10
【问题描述】:

是否可以写出类似的东西:

def foo(x: Int, y: Double)

def bar(x: Int, y: Double) = foo(_)

我想避免重复自己说:

def foo(x: Int, y: Double)

def bar(x: Int, y: Double) = foo(x, y)

那么在两个参数列表的类型和大小相同并且不应该发生参数重新定位的情况下,是否可以实现参数转发?

【问题讨论】:

    标签: scala methods parameter-passing


    【解决方案1】:

    是的,如果功能栏除了完全转发到foo 之外什么都不做,您可以执行以下操作:

    def foo(x : Int, y : Double) { println("X: " x + " y: " + y) }
    def bar = foo _
    
    bar(1,3.0)
    //prints out "X: 1 y: 3.0"
    

    在这种情况下,下划线表示您想要返回函数foo 本身,而不是调用它并返回reuslt。这意味着当调用bar 时,它会简单地返回函数foo,然后将使用您提供的参数调用该函数。

    【讨论】:

      【解决方案2】:

      是的,但有点双关语

      def foo(x: Int, y: Double):Int = 3
      
      def bar = foo(_, _)
      

      在这种情况下 bar 不是采用 int 和 double 的方法。相反,它是一个不带参数的方法,返回一个带和 int a double 的函数。从调用者的角度来看,它们可以互换使用。

      bar(3, 5.9)  // expands to bar apply(3, 5.9), which calls foo
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-27
        • 2018-02-19
        • 1970-01-01
        • 2020-03-01
        • 2020-01-21
        • 1970-01-01
        相关资源
        最近更新 更多