在下面的示例中,Scala是否可以自动传递参数?
我正试图为客户定义一个干净的接口来使用我的库。下面是一些示例客户机代码在下面的示例中,Scala是否可以自动传递参数?,scala,Scala,我正试图为客户定义一个干净的接口来使用我的库。下面是一些示例客户机代码 for (security <- allSecurities) { val askLast = ask } 而不是 val askLast = ask(security) 我可以在Scala中这样做吗?为什么不在父类中创建一个价格列表,并在客户端中使用它呢 def myfunc = for(security <- allSecurities) yield { lastAsk(securi
for (security <- allSecurities) {
val askLast = ask
}
而不是
val askLast = ask(security)
我可以在Scala中这样做吗?为什么不在父类中创建一个价格列表,并在客户端中使用它呢
def myfunc = for(security <- allSecurities) yield {
lastAsk(security).price
}
你可以通过一个懒散的序列“视图”得到你想要的
var lastSecurity: Int = _
val securities = Seq(1, 2).view.map { a =>
lastSecurity = a
a
}
for (s <- securities) {
println("%d %d".format(s, lastSecurity))
}
这里的关键思想是,在惰性视图中,map
不会立即求值,而只在for循环需要元素时才求值
这是另一种方法。我不推荐这是好代码,但它确实展示了Scala的灵活性
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))
}
var lastSecurity:Int=_
类SecurityWrapper(s:Seq[Int]){
def foreach(f:Int=>单位){
s、 foreach{a=>
lastSecurity=a
f(a)
}
}
}
对于(security)这里有一个接近的方法可以避免客户端需要传递参数来询问。您可以修改allSecurities
方法,以生成一个包含安全性和ask调用将返回的值的元组,即
def allSecurities = for {
security <- lastTrade.keySet.toList
} yield {
(security, lastAsk(security).price)
}
def allSecurities=for{
安全
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
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))
}
def allSecurities = for {
security <- lastTrade.keySet.toList
} yield {
(security, lastAsk(security).price)
}
for((security,askLast)<-allSecurities){
//to client things with askLast
}