Scala中的匿名类型

时间:2013-04-17 15:46:35

标签: scala

尝试将我的一些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);
}

2 个答案:

答案 0 :(得分:8)

这是一个实现。

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) );
  }
}

答案 1 :(得分:5)

这将是一个有点愚蠢且性能较差的因素(因为scala会use reflection执行这些令人讨厌的事情):

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

一般来说,您应该更喜欢元组(Ben's答案)或案例类。