小编Jef*_*Sax的帖子

为什么在Func和Expression <Func>之间lambda表达式参数不明确?

假设我有一个班级:

class MyClass {
    public int MyMethod(Func<int, int> f) { return 0; }
    public int MyMethod(Expression<Func<int, int>> f) { return 1; }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用lambda表达式调用该方法时,我收到一个编译错误,指出调用在两个重载之间是不明确的:

var myClass = new MyClass();
myClass.MyMethod(x => 1 + x); // Error!
Run Code Online (Sandbox Code Playgroud)

当然,使用显式类型调用可以正常工作:

myClass.MyMethod((Func<int, int>)(x => 1 + x)); // OK, returns 0
myClass.MyMethod((Expression<Func<int, int>>)(x => 1 + x)); // OK, returns 1
Run Code Online (Sandbox Code Playgroud)

表达式树包含更多信息(实际代码),我可能希望在可用时使用此信息.但我也希望我的代码能够与代表合作.不幸的是,这种模糊性使得我必须找到另一种方法来区分两个调用,这会混淆一个干净的API.

C#规范没有说明这个具体情况,所以在这个意义上,行为确实符合规范.

但是,有一个论点要求表达式树应该优先于委托.该Compile方法充当从表达式树到委托的显式转换.表达式树包含更多信息,当您编译为委托时,您将丢失该信息.另一方面没有转换.

有没有理由不喜欢表达树?

.net lambda expression-trees

23
推荐指数
1
解决办法
836
查看次数

为什么pow(-infinity,正非整数)+无限?

C99附件F(IEEE浮点支持)说:

pow(??, y) y> 0时返回+∞而不是奇数.

但是,比方说,( - ∞)0.5实际上有虚数值±∞i,而不是+∞.C99自己sqrt(??)返回NaN并按预期生成域错误.为什么然后pow需要返回+∞?

(大多数其他语言直接使用C库,或者像本例中的Python一样,通过标准复制它所需的行为,因此在实践中这不仅仅影响C99.)

c math floating-point standards ieee-754

14
推荐指数
1
解决办法
485
查看次数

如何为fsi添加通用类型的漂亮打印机?

在F#Interactive(fsi)中,您可以使用AddPrinterAddPrinterTransformer为交互式会话中的类型提供漂亮的打印.如何为通用类型添加此类打印机?使用该_类型的通配符不起作用:

> fsi.AddPrinter(fun (A : MyList<_>) -> A.ToString());;
Run Code Online (Sandbox Code Playgroud)

不使用打印机.

输入类型参数也会发出警告:

> fsi.AddPrinter(fun (A : MyList<'T>) -> A.ToString());;

  fsi.AddPrinter(fun (A : MyList<'T>) -> A.ToString());;
  -------------------------------^^

d:\projects\stdin(70,51): warning FS0064: This construct causes code
to be less generic than indicated by the type annotations. The type
variable 'T been constrained to be type 'obj'.
Run Code Online (Sandbox Code Playgroud)

这也不是我想要的.

f# fsi

6
推荐指数
1
解决办法
771
查看次数

使用Jm + 1 = 2mj(m)-j(m-1)公式在MATLAB中计算bessel函数

我尝试使用该公式实现bessel函数,这是代码:

function result=Bessel(num);


if num==0
    result=bessel(0,1);
elseif num==1
    result=bessel(1,1);
else
    result=2*(num-1)*Bessel(num-1)-Bessel(num-2);
end;
Run Code Online (Sandbox Code Playgroud)

但是如果我使用MATLAB的bessel函数将它与这个函数进行比较,我会得到太高的不同值.例如,如果我键入贝塞尔(20)它给我3.1689e + 005作为结果,如果我输入bessel(20,1)它给我3.8735e-025,一个完全不同的结果.

math matlab recurrence bessel-functions

5
推荐指数
1
解决办法
3399
查看次数

浮点格式可以存储多少个不同的值?

我对IEEE 754-2008的假设:

binary16 - 2 ^ 16个不同的值,binary32 - 2 ^ 32个不同的值,... binary128 - 2 ^ 128个不同的值.

它是否正确?

numbers ieee-754

4
推荐指数
1
解决办法
1780
查看次数