6

试图将我的几个 C# 项目转换为 Scala,但仍在试图弄清楚如何进行一些转换。我遇到了这段代码,如果有人可以帮助我在 Scala 中编写以下代码,我将不胜感激,我对 Select 语句中的匿名代码块特别感兴趣。

static void Main(string[] args)
{
  Stock stk = new Stock();
  Select(stk, a => new { a.Prices, a.Symbol });
}
public static U Select<T, U>(T data,Func<T,U> item)
{
  return item(data);
}
4

2 回答 2

9

这是一个实现。

class Stock(val prices: List[Double], val symbol: String) 

object CSharp {
  def select[T, U](data: T)(f: T => U): U = {
    f(data);
  }  
  def main(args: Array[String]): Unit = {
    val stk = new Stock(List(1.1, 2.2, 3.3, 4.4), "msft")
    select(stk)(a => (a.prices, a.symbol) );
  }
}
于 2013-04-17T15:57:21.510 回答
6

它会有点冗长且性能较差(因为 scala 将使用反射来做这些讨厌的事情):

def select[T, U](data: T, item: T => U) = item(data)
case class Stock(price: Int, symbol: String)


val x = select(
  Stock(100, "AAPL"), 
  { stock: Stock => new { val price = stock.price; val symbol = stock.symbol }}
)

x.symbol
res2: String = AAPL

一般来说,您应该更喜欢元组(本的回答)或案例类。

于 2013-04-17T15:56:51.640 回答