gpt4 book ai didi

scala 获取作为参数发送的函数名称

转载 作者:行者123 更新时间:2023-12-04 16:04:28 24 4
gpt4 key购买 nike

我有一个接受函数作为参数的方法。是否可以提取函数名称?
例如:

def plusOne(x:Int) = x+1
def minusOne(x:Int) = x+1

def printer(f: Int => Int) = println("Got this function ${f.getName}") //doesn't work of course

scala> printer(plusOne)
Got this function plusOne


scala> printer(minussOne)
Got this function minusOne

最佳答案

不直接。请注意,也可以传递 lambda 而不是函数或方法名称。但是您可能想查看 sourcecode 库,它可以帮助您实现其中的一些。例如:

val plusOne = (x: Int) => x + 1
val minusOne = (x: Int) => x + 1

def printer(fWithSrc: sourcecode.Text[Int => Int]) = {
val f = fWithSrc.value
println(s"Got this function ${ fWithSrc.source }. f(42) = ${ f(42) }")
}

由于隐式转换的工作方式,您不能像示例中那样直接使用 def 版本。如果你有这个:
def plusOne(x: Int) = x + 1

那么你需要这个:
printer(plusOne _)

您还将在参数的字符串表示中看到 _

请注意,它还会破坏 lambda 的类型推断,即,您不能再这样写了:
printer(_ * 2)

这是一种耻辱。

关于scala 获取作为参数发送的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44408880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com