2013-04-17 99 views
4

试图将我的几个C#项目转换为Scala,并试图弄清楚如何进行一些转换。我遇到了这个代码,并希望有人能够帮助我在Scala中编写下面的代码,我特别感兴趣的是Select语句中的匿名代码块。Scala中的匿名类型

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

回答

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

这将是一个小wordier少高性能的(原因斯卡拉会做这样讨厌的东西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应答)或case类。