尝试将我的一些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);
}
答案 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答案)或案例类。