gpt4 book ai didi

scala - Scala是否可以在下面的例子中自动传递参数?

转载 作者:行者123 更新时间:2023-12-01 09:59:57 27 4
gpt4 key购买 nike

我正在尝试为客户定义一个干净的界面以使用我的库。下面是一些示例客户端代码。

for (security <- allSecurities) {
val askLast = ask
}

问题是我希望“请求”自动通过“安全”。我在父类中的尝试如下

 var lastSecurity = ""  
private val lastAsk = new HashMap[...]
def allSecurities = for {
security <- lastTrade.keySet.toList
} yield {
lastSecurity = security
security
}

def ask = lastAsk(lastSecurity).price

不幸的是,它并没有像我想象的那样工作,因为在客户端 lastSecurity 在整个循环中具有相同的值而不是动态更新。所以基本上我试图让客户端做

val askLast = ask

代替

val askLast = ask(security)

我可以在 Scala 中执行此操作吗?

最佳答案

你可以通过序列的惰性“ View ”得到你想要的,

  var lastSecurity: Int = _
val securities = Seq(1, 2).view.map { a =>
lastSecurity = a
a
}

for (s <- securities) {
println("%d %d".format(s, lastSecurity))
}

打印

1 1
2 2

这里的关键思想是,对于惰性 View ,map 不会立即求值,而是仅在 for 循环需要元素时求值。


这是另一种方法。我不推荐这是好的代码,但它确实展示了 Scala 的灵 active ,

  var lastSecurity: Int = _

class SecurityWrapper(s: Seq[Int]) {
def foreach(f: Int => Unit) {
s.foreach { a =>
lastSecurity = a
f(a)
}
}
}

for (security <- new SecurityWrapper(Seq(1, 2))) {
println("%d %d".format(security, lastSecurity))
}

SecurityWrapper 包含自定义的 foreach 方法。在循环的每次迭代中,它都会写入 lastSecurity 变量。 Scala 的 for 理解糖将自动使用 SecurityWrapper.foreach,我们不需要做任何额外的工作。

关于scala - Scala是否可以在下面的例子中自动传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7087665/

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