gpt4 book ai didi

scala - 获取对具有冲突名称的外部函数的参数的引用

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

请考虑以下代码:

trait A {
def a : Int
}

def f ( a : Int ) = {
def a0 = a
new A {
def a = a0
}
}

问题很明显: def a0 = a是典型的烦人的样板代码,当引入更多参数时,情况只会变得更糟。

我想知道是否有可能以某种方式直接引用 a特征实例声明内外部作用域的变量,从而摆脱中间 a0 .

请记住,不允许更改函数输入参数的名称,因为更改特征也是如此。

最佳答案

我认为没有直接的方法可以做到这一点,因为它需要一些特殊的(假设的)标识符 thisMethod .但是,根据您的上下文,可能可以通过以下两种方法来避免名称阴影:

(1) 替换匿名类A与实现类:

case class AImpl(a: Int) extends A

def f(a : Int): A = AImpl(a)

(2) 定义 f在抽象特征中并为其使用具体实现:
trait F {
def f(a: Int): A
}

object FImpl extends F {
def f(a0: Int): A = new A { val a = a0 }
}

def test(factory: F): A = factory.f(a = 33)

关于scala - 获取对具有冲突名称的外部函数的参数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229005/

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