scala文档显示创建scala脚本的方式如下:
#!/bin/sh
exec scala "$0" "$@"
!#
/* Script here */
Run Code Online (Sandbox Code Playgroud)
我知道这会执行scala,其中包含脚本文件的名称和传递给它的参数,并且scala命令显然知道要读取一个以这样的方式启动的文件并忽略所有内容直到反向的shebang !#
我的问题是:我有什么理由为scala脚本使用这种(相当冗长的)格式,而不仅仅是:
#!/bin/env scala
/* Script here */
Run Code Online (Sandbox Code Playgroud)
从快速测试中可以看出,这一点完全相同,但不那么冗长.
我有两个Instant
对象,并希望得到Duration
它们之间有多少时间,但是Instant.minus
只接受a ReadableDuration
或a long
的更改时间,并且似乎没有任何方法可以减去两个瞬间来获得它们之间的区别.
我发现的其他答案似乎建议将两个时刻转换为毫秒并自己进行数学计算,但我更喜欢保留类型安全性并且不需要重新实现最终启动逻辑的东西.
我如何Duration
从两个Instant
s 获得?
经济学说:
代表(透明)
[...] 仅当单个字段为 pub 或其布局以散文形式记录时,此 repr 才被视为类型的公共 ABI 的一部分。否则,该布局不应被其他 crate 所依赖。
ManuallyDrop<T>
是repr(transparent)
,但其单个字段不是pub
。它的文档说:
[...] 这个包装是 0 成本的。
ManuallyDrop<T>
受到与 相同的布局优化T
。[...]
这算不算在散文中记录其布局?可以安全地假设我可以从 转换或以其他方式转换(例如指针转换)T
吗ManuallyDrop<T>
?
在Common Lisp中,我可以得到一个函数来传递#'
语法,如下所示:
(let ((x #'+))
(funcall x 1 2))
Run Code Online (Sandbox Code Playgroud)
但是假设我想设置一个函数,所以我不必使用funcall
它.Common Lisp是否具有本地函数名称表,或仅具有分配给它的全局函数名称表defun
?
有没有办法分配给除以外的功能符号defun
?或者更一般地说:有没有办法可以做类似于这个非工作的例子:
(setf #'x #'+)
(x 1 2)
Run Code Online (Sandbox Code Playgroud) 我们必须迭代和递归地编写一个 gcd 计算器,并且给我们一个测试脚本,而我的程序失败了 2/10 测试(gcd_iterative(1000, 48) = 1000
, gcd_iterative(48, 24) = 48
)。所以我在我的程序中加入了打印语句,并且它起作用了。我开始一次删除 1 个语句,并且有 1 行如果我删除该语句,则会产生错误的答案。为什么会发生这种情况以及如何解决它?
using namespace std;
#include <sstream>
#include <string>
#include <iostream>
#include <cstdlib>
int gcd_iterative(int m, int n)
{
int r;
while(r != 0)
{
r = m % n;
m = n;
n = r;
}
return m;
}
int gcd_recursive(int m, int n)
{
if(n == 0)
{
return m;
}
else
{
return gcd_recursive(n, m % n);
}
}
int …
Run Code Online (Sandbox Code Playgroud)