试图将我的几个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);
}
Run Code Online (Sandbox Code Playgroud)
小智 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) );
}
}
Run Code Online (Sandbox Code Playgroud)
这将是一个更单一,更低效的(因为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
Run Code Online (Sandbox Code Playgroud)
一般来说,你应该更喜欢元组(Ben的答案)或案例类.
| 归档时间: |
|
| 查看次数: |
3894 次 |
| 最近记录: |