分配函数时保留命名参数和默认参数
Keeping named and default parameters when assigning a function
使用未应用的方法分配函数时,命名参数和默认参数似乎丢失了。有什么办法可以避免这种情况吗?
def foo(namedParam: String = "defaultValue") = namedParam*2
// scala> foo()
// res8: String = defaultValuedefaultValue
def bar = foo _
// scala> bar()
// <console>:28: error: not enough arguments for method
// apply: (v1: String)String in trait Function1.
// Unspecified value parameter v1.
我想这样做的原因是将我的导入捆绑在一个文件中,即
myproject/imports.scala
object imports {
def externalAPIFunction = myproject.somepackage.internalFunction _
}
scala shell
import myproject.imports._
externalAPIFunction() // no named or default arguments :(
有什么方法可以做到这一点,还是我必须将我的默认参数放在外部函数定义中?
我认为您需要使用柯里化。
def foo()(namedParam: String = "defaultValue") = namedParam * 2
//> foo: ()(namedParam: String)String
// scala> foo()
// res8: String = defaultValuedefaultValue
def bar() = foo() _ //> bar: ()String => String
bar() //> res0: String => String = <function1>
函数(即 Function<N>[...]
类型的值)在 Scala 中不能有默认或隐式参数,只有方法可以。 method _
returns 一个函数:这就是它的用途。所以是的,为了达到你的目的,你需要写
object imports {
def externalAPIFunction(namedParam: String = "defaultValue") =
myproject.somepackage.internalFunction(namedParam)
}
您可以使用
避免重复
object imports {
val x = myproject.somepackage
}
// elsewhere
import myproject.imports._
x.internalAPIFunction()
// or
import myproject.imports.x._
internalAPIFunction()
对于您的目的来说,这可能足够好,也可能不够好。
使用未应用的方法分配函数时,命名参数和默认参数似乎丢失了。有什么办法可以避免这种情况吗?
def foo(namedParam: String = "defaultValue") = namedParam*2
// scala> foo()
// res8: String = defaultValuedefaultValue
def bar = foo _
// scala> bar()
// <console>:28: error: not enough arguments for method
// apply: (v1: String)String in trait Function1.
// Unspecified value parameter v1.
我想这样做的原因是将我的导入捆绑在一个文件中,即
myproject/imports.scala
object imports {
def externalAPIFunction = myproject.somepackage.internalFunction _
}
scala shell
import myproject.imports._
externalAPIFunction() // no named or default arguments :(
有什么方法可以做到这一点,还是我必须将我的默认参数放在外部函数定义中?
我认为您需要使用柯里化。
def foo()(namedParam: String = "defaultValue") = namedParam * 2
//> foo: ()(namedParam: String)String
// scala> foo()
// res8: String = defaultValuedefaultValue
def bar() = foo() _ //> bar: ()String => String
bar() //> res0: String => String = <function1>
函数(即 Function<N>[...]
类型的值)在 Scala 中不能有默认或隐式参数,只有方法可以。 method _
returns 一个函数:这就是它的用途。所以是的,为了达到你的目的,你需要写
object imports {
def externalAPIFunction(namedParam: String = "defaultValue") =
myproject.somepackage.internalFunction(namedParam)
}
您可以使用
避免重复object imports {
val x = myproject.somepackage
}
// elsewhere
import myproject.imports._
x.internalAPIFunction()
// or
import myproject.imports.x._
internalAPIFunction()
对于您的目的来说,这可能足够好,也可能不够好。