2013-04-17 7 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 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 

В целом следует отдавать предпочтение наборам (Ben's ответа) или классы регистра.

Смежные вопросы