是否可能具有像(parameter1, parameter2) applied myFunction
这样的语法。这里myFunction将应用于给定的参数。具体示例:val myFunction = (a:String) => a+a+"there"; "hello" applied myFunction
应输出“hellohellothere”。 我知道有可能做(parameter1, parameter2) match {case myFunctionWrittenOut}
,所以上面的会变成"hello" match {case a:String => a+a+"there"}
但是在这里你必须写出这个函数:你不能使用一个引用。在Scala中应用函数之前写入函数参数
0
A
回答
6
我不认为这是可能的标准斯卡拉。但是,你可以写一些辅助方法,这将使像这样可供选择:
implicit class Applied1[T](val t: T) extends AnyVal {
def applied[R](f: T => R): R = f(t)
}
implicit class Applied2[T1, T2](val t: (T1, T2)) extends AnyVal {
def applied[R](f: (T1, T2) => R): R = f(t._1, t._2)
}
implicit class Applied3[T1, T2, T3](val t: (T1, T2, T3)) extends AnyVal {
def applied[R](f: (T1, T2, T3) => R): R = f(t._1, t._2, t._3)
}
// ... and 19 more implicit classes: Applied4 to Applied22
然后你就可以使用它像这样:
def minus(a: Int): Int = -a
def plus(a: Int, b: Int): Int = a + b
def plus(a: Int, b: Int, c: Int): Int = a + b + c
scala> 5 applied minus
res0: Int = -5
scala> (1, 2) applied plus
res1: Int = 3
scala> (1, 2, 3) applied plus
res2: Int = 6
但是,这可能是更复杂一点与一般的使用函数或带有隐含参数的函数:
def mul[T : Numeric](a: T, b: T): T = {
import Numeric.Implicits._
a * b
}
scala> (1.5, 2.5) applied (mul(_, _))
res3: Double = 3.75
-3
在Scala中,函数的参数列表中的函数之前总是写:
val fn = (a: Int, b: Int) => a + b
// ^parameters^^function
+0
对不起,我的问题似乎并不清楚。看到我更新的问题。 – user
3
隐类可以用来实现一些东西,这似乎是类似于你在找什么。
只有一个构造函数参数的隐式类可用作将方法添加到给定类型的模式。一个例子是DurationInt
,其将方法“添加”到整数以使其能够转换为持续时间。它被导入到使用import scala.concurrent.duration._
DurationInt的简化版本可以定义为范围如下:
implicit class DurationInt(n: Int) {
def seconds: FiniteDuration = Duration(n, TimeUnit.SECONDS)
}
这使得能够使用秒方法对所有整数
2.seconds // Returns a duration object
对于具有多种功能的参数可以为隐式类使用元组参数:
implicit class TupleConcat(tuple: (String, String)) {
def concat: String = tuple._1 + tuple._2
}
// enables the following syntax
("aa", "bb").concat
对于这些隐式类来说,扩展AnyVal是很常见的,这允许一些编译器优化,避免在许多情况下实际上需要实例化隐式类。
implicit final class DurationInt(val n: Int) extends AnyVal { /* implementation */ }
相关问题
- 1. 如何在函数中写入参数?
- 2. 在R中评估函数之前将函数改为参数?
- 3. 在scala中传递参数化函数
- 4. 添加参数的函数调用该函数之前 - Node.js的
- 5. 在Scala中使用foldLeft对curried函数应用参数列表
- 6. 使用类型参数写入函数
- 7. 通用Scala函数,其输入是变量函数的函数
- 8. Scala函数中的异构参数
- 9. scala函数中的更新参数
- 10. 编写调用scala中泛型函数的泛型函数
- 11. 如何在Scala的函数式样中重写此函数?
- 12. 如何在scala中编写函数isSymbol?
- 13. Scala中缺少所有参数的部分应用函数
- 14. 在laravel中写入函数
- 15. 在plsql中写入函数
- 16. 在MatLab中写入函数
- 17. 在python中定义函数之前调用函数
- 18. 在wordpress函数中调用之前定义的函数
- 19. C函数在输入之前退出
- 20. 函数参数,写倍
- 21. 函数参数之后和函数体之前的char * in_str是什么意思?
- 22. 函数在声明之前
- 23. 类型参数不能在Scala中的函数体中引用?
- 24. 函数在参数可用之前运行
- 25. 在调用之前完成所有函数参数
- 26. 在函数的参数之前使用&的目的是什么?
- 27. 在调用基构造函数之前处理参数
- 28. 在评估Scala中的函数之前引发错误
- 29. Scala可变参数函数和Seq
- 30. Scala:没有参数的函数
我发现很难理解你想实现什么。令牌//开始评论。你想“重载”这个并且执行一个函数应用吗? – Suma