使用Clang,以下内容:
#include <stdio.h>
int main(void)
{ double const x = 1.234;
double *p = (double *) &x;
/* Same with double *p = &x; but with a mere warning from clang
Clang++ does raise an error in this case.
*/
*p = 5.678;
printf("*p = %f\n", *p);
printf(" x = %f\n", x);
if (&x == p) {
printf("&x = %p\n", &x);
printf(" p = %p\n", p);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
给出输出:
* p = 5.678000
x = 1.234000
&x = …
object main {
def main(args: Array[String]) = {
val x: Option[Int] = Some(2)
val y: Option[Int] = Some(3)
val z: Option[Int] = Some(5)
val result1 = for {
x <- x
y <- y
z <- z
} yield {
(x + y, x + z, y + z)
}
println(result1)
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了Some((5,7,8)). 如果相反,例如val y: Option[Int] = Nonethen也result1将是 a None。
然而,即使我们没有y,我们仍然可以计算x + z。所以我希望得到这样的结果:
(None,Some(7),None)
Run Code Online (Sandbox Code Playgroud)
这可以通过以下方式实现,无需太多代码
import scala.util.Try
(Try(x.get …Run Code Online (Sandbox Code Playgroud) 如果我们将其限制为三个参数的情况,我想从中得到
val f = (x: Int, y: Int, z: Int) => x + y + z
Run Code Online (Sandbox Code Playgroud)
对此:
val g = (x: Int) => { (y: Int, z: Int) => f(x, y, z) }
Run Code Online (Sandbox Code Playgroud)
我什至不知道该操作是如何调用的,大概是“柯里化第一个参数”?
Scala 是否有用于此操作的实用函数,或者像上面那样写出来是实现它的唯一方法吗?