在/sf/ask/51136501/中,作者在答案摘要中写道:
对于Java NIO,使用c.force(true),然后使用s.getFD().sync()
我的问题是:你真的需要两者吗?力不够吗?是不是强制和同步只是不同的接口做同样的事情?我找不到任何确认的地方.
在Scala中是否有一些标准方法来指定一个什么都不做的函数,例如在实现特征时?这有效:
trait Doer {
def doit
}
val nothingDoer = new Doer {
def doit = { }
}
Run Code Online (Sandbox Code Playgroud)
但也许还有一些更合适的方式来制定什么呢?
编辑出现了一些有趣的答案,我在回答中添加了一些问题.首先,事实证明我可以在Doer中使用默认实现.好的提示,但你并不总是那么想.其次,显然更惯用的写作方式是:
val nothingDoer = new Doer {
def doit { }
}
Run Code Online (Sandbox Code Playgroud)
第三,尽管没有人提出这一点,但我发现这似乎也有效:
val nothingDoer = new Doer {
def doit = Unit
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的选择吗?
(我认为,少数人建议的":单位"并没有真正添加任何内容.)
在创建没有类参数的对象时,我很难决定是否应该包含空括号.一个具体的例子:我正在与现有的Java代码连接,并创建一个实现名为EventResponder的接口的对象.我应该写:
val service = new EventResponder() {
def respond(message: String): String = {
return ""
}
}
Run Code Online (Sandbox Code Playgroud)
要么
val service = new EventResponder {
def respond(message: String): String = {
return ""
}
}
Run Code Online (Sandbox Code Playgroud)
(或者,顺便说一句,还有什么我应该改变的吗?)
两者似乎都有效,据我所知,Scala风格指南对此没有任何建议.它讨论了何时为方法或arity-0包含空括号,但这种情况并不完全相同.
默认情况下,C-S-t并且M-S-t都在我的Emacs绑定。因此,当我按下它们时,它们被翻译成C-t和M-t。很好,但我想用它们对原始函数进行调整,因此将这些行放在我的.emacs:
(global-set-key (kbd "C-S-t") 'transpose-chars-backward)
(global-set-key (kbd "M-S-t") 'transpose-words-backward)
Run Code Online (Sandbox Code Playgroud)
那里的功能是我自己的,当通过M-x.
这适用于C-S-t,但不适用于M-S-t仍然被转换为M-t. 上的消息C-h k M-S-t证实了这一点。
并不是说M-S-一般配置组合是不可能的,因为M-q和M-S-q做不同的事情。
是什么导致了这种不一致,我该如何解决?
我在 Mac OS X 10.9.5 上运行 Aquamacs。
当我有一个像这样的枚举序列时:
57. y = alloc(30)
58. z = alloc(40)
59. t = alloc(25)
Run Code Online (Sandbox Code Playgroud)
org-mode 一直将数字设置为 1、2、3,除非我非常小心并且不碰任何“电子”键。有什么办法可以防止这种情况发生,告诉 org-mode 我真的希望这个枚举从 57 开始?
我是透析器的新手,我希望通过回答这个问题,有人可以快速了解它的操作.
我认为,给定数字X和非负整数N的下列函数将产生一个数字.(X到N次幂.)
-spec pow(X :: number(), N :: non_neg_integer) -> number().
pow(X, N) ->
pow(X, N, 1).
pow(_X, 0, R) ->
R;
pow(X, N, R) ->
pow(X*X,
N bsr 1,
if
N band 1 =:= 0 ->
R;
true ->
X*R
end).
Run Code Online (Sandbox Code Playgroud)
但透析器不喜欢我的规格.它告诉我:
Invalid type specification for function t:pow/2.
The success typing is (_,integer()) -> any()
Run Code Online (Sandbox Code Playgroud)
它在我看来是一个过于包容的规范.有人可以解释为什么会这样做,以及是否有任何方法可以接受更严格的类型规范?
我找不到一种方法来使用Erlang库函数来创建一个由重复N次的元素E组成的列表.当然,写一个很简单,
repeat(E, N) ->
repeat(E, N, []).
repeat(_E, 0, L) ->
L;
repeat(E, N, L) ->
repeat(E, N-1, [E|L]).
Run Code Online (Sandbox Code Playgroud)
但我希望这是一个单行使用一些列表模块功能或其他东西.有办法吗?
编辑:好的,这当然是,
lists:map(fun(_) -> E end, lists:seq(1, N))
Run Code Online (Sandbox Code Playgroud)
但这会创建一个立即丢弃的额外列表.对我来说似乎效率低下,但也许我并不认为Erlang是惯用的.
编辑2:原来这是一个愚蠢的问题.我只是在某种程度上没有看到列表模块中的重复功能.
erlang ×2
scala ×2
aquamacs ×1
coding-style ×1
dialyzer ×1
emacs ×1
io ×1
java ×1
key-bindings ×1
list ×1
nio ×1
org-mode ×1
storage ×1
type-systems ×1