我想使用Lazy T来实现memoization,但初始化函数似乎需要一个静态上下文.
例如,以下代码拒绝编译,警告非静态成员a和b不可访问.我不清楚为什么会这样,因为Lazy对象本身就是一个实例成员,并且在静态上下文中没有可见性.
public class SomeExpensiveCalculation
{
private int a;
private int b;
public Lazy<int> Result = new Lazy<int>(() => a + b); //nope!
}
Run Code Online (Sandbox Code Playgroud) 我正在处理财务数据,所以它有很多,它需要相对高精度(64位浮点或更宽).
围绕我的工作场所的标准做法似乎是将其全部表示为c#decimal类型,这是一个128位宽的浮点,专门用于支持round-off free base10操作.
由于64位足够宽以保持代表性的精度,所以将数据转换为更宽的类型进行所有计算(mult,div,add等)然后回到64位以便坐在内存(这是它花费的地方)是荒谬的.大部分时间)?
供参考:内存绝对是限制资源.
我相信一种功能语言对我公司在(财务)工作的领域有帮助,我们在这里阅读大量数据,对其进行一些数学处理,然后再次存储.从根本上讲非常可并行化并且不适合具有状态的广泛对象图的东西(在我的估计中).
作为一个.NET商店,我立刻想到了F#,但我担心"研究"这几个词突出地散布在几乎所有的MS材料上.
有谁知道F#是否会成为MS支持未来的事情,或者我是否会更好地试图说服与Scheme/Haskell /等人合作的权力?
我在Scala 2.10中遇到for-comprehension的语法问题.
for(a <- List(Some(1,2)); b <- a) yield b 评估为 List(1,2)
那么为什么不for(a <- Some(List(1,2)); b <- a) yield b评价同样的东西呢?
类型检查器抱怨第二个表达式(b <-a)说它List[Int]
在期待时找到了Option[?]