我很想知道转换在函数调用中是如何工作的。我的类中有两个特定函数的重载,称为execute. 第一个重载是基本实现并接受double类型参数。第二个重载接受int类型参数。第二个重载也调用基本重载,并通过将参数强制转换为double。
基本实现如下所示:
public double execute(double leftVal, double rightVal) throws IOException {
...
return solution;
}
Run Code Online (Sandbox Code Playgroud)
重载版本如下所示:
public int execute(int leftVal, int rightVal) throws IOException {
return (int) execute((double) leftVal, (double) rightVal);
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的(double) leftVal, (double) rightVal部分,特别是部分,是多余的,为什么它可以在删除一个演员表的情况下工作?在第一个重载的调用工作无论何种顺序铸造中,两者execute(leftVal, (double)rightVal)并execute((double) leftVal, rightVal)正常执行,不产生错误。我一直认为 Java 在明确识别类型方面非常严格。我希望有一些警告或错误,即不存在接受调用之类的函数execute(double, int)。不过,我有一个想法,即第一个强制转换有助于编译器确定选择哪个重载,因此第二个强制转换是隐式的。也许是因为这些类型是原始的,易于强制转换?还有一个小问题,两个函数都称为重载还是第一个定义之后的每个定义都是原始函数的重载?
我有几个关于JustHaskell 语法的问题。
当我尝试用不同的方法编写函数来计算二项式系数时出现问题。
考虑函数:
binom :: Integer -> Integer -> Maybe Integer
binom n k | n < k = Nothing
binom n k | k == 0 = Just 1
binom n k | n == k = Just 1
binom n k | otherwise = let
Just x = (binom (n-1) (k-1))
Just y = (binom (n-1) k)
in
Just (x + y)
Run Code Online (Sandbox Code Playgroud)
当我尝试otherwise在let..in没有 let..in 块的情况下编写没有块的情况时,如下所示:
binom n k | …Run Code Online (Sandbox Code Playgroud)