在下面的示例中,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
}