有时vim的smartindent在你进入下一行时没有为下一行选择正确的缩进级别,你想要回到前一行的缩进级别并从那里开始.我知道你可以打ctrl-d几次来达到这个目的但是对于一个直接进入上面一行缩进级别的键来说会更有用.
以下是我的代码演示问题的最小示例:
module Substring = struct
type t = {
base: string;
pos: int;
len: int
}
end
module Parser = struct
type 'a t = Substring.t -> ('a * Substring.t) option
let return x s = Some (x, s)
end
type (_, _) t =
| TryParse : unit Parser.t -> ('a, 'a) t
| Parse : 'b Parser.t -> ('a, 'b -> 'a) t
| Concat : ('b, 'c) t * ('a, 'b) t -> ('a, 'c) t
let …Run Code Online (Sandbox Code Playgroud) 我不确定发生了什么,但我没有更改我的pom并且只进行了干净的安装,但现在运行我的应用程序mvn gae:run给了我以下错误:
[ERROR] Failed to execute goal net.kindleit:maven-gae-plugin:0.9.4:run (default-cli) on project geoip-service: Execution default-cli of goal net.kindleit:maven-gae-plugin:0.9.4:run failed: Plugin net.kindleit:maven-gae-plugin:0.9.4 or one of its dependencies could not be resolved: Failed to collect dependencies for net.kindleit:maven-gae-plugin:jar:0.9.4 (): Failed to read artifact descriptor for net.kindleit:gae-runtime:pom:1.7.5: Could not find artifact net.kindleit:maven-gae-parent:pom:0.9.6-SNAPSHOT in genius (our_own_repo_here)
我正在使用sdk的1.7.2版本,所以我不确定1.7.5可能来自哪里.
我正在将我的OCaml程序中的一些工作并行化(parmap但是)我宁愿不将核心数量硬编码到我的应用程序中.有没有办法在运行时获得核心数量?我宁愿不再添加任何依赖项(没有超出parmap或JS的core).我有一种感觉,我在stdlib看到一些简单的电话......
编辑:它不必是便携式的.在linux上工作已经足够了.
我想使用以下签名使我的代码在字符串和数组(真正的任何可索引类型)上通用:
module type Indexable = sig
type 'a t
val get : int -> 'a t -> 'a
end
Run Code Online (Sandbox Code Playgroud)
module MyCode (I : Indexable) = struct ... end
但是我当然不能将我的签名应用于字符串,如下所示:
module StrMyCode = MyCode(struct
type 'a t = string
let get i a = a.[i]
end)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以解决这个问题吗?或者也许是另一种不同的方式?我知道在最糟糕的情况下我可以使用字符数组,但我宁愿将代码保存在丑陋的演员表中,这是我之前想到的,所以我想得到一个明确的答案.
也许我错过了一些明显的东西,但是文档并没有向我透露任何东西.
解决方案或解决方法将非常有用.
我正在尝试编写一个小型Lwt(和电池)端口扫描程序,以便更好地了解Lwt,但每当我尝试使用scan_ports_range扫描太多端口时,我就会遇到一个奇怪的异常.我怀疑我保持最大连接数打开的机制不起作用......
Exception: Unix.Unix_error (Batteries.Unix.EMFILE, "socket","").
Fatal error: exception Sys_error("/home/(censored)/.opam/4.00.1/lib/utop: Too many open files")
(这也崩溃utop btw)
代码如下.要触发错误评估:
scan_ports_range ~host:"127.0.0.1" (1000,2000)
我对lwt风格的批评/建议也很受欢迎,因为我刚开始学习它.
open Lwt
let addr_parts addr =
let (host, port) = String.split addr ":" in (host, int_of_string port)
let addr ~host ~port =
lwt entry = Lwt_unix.gethostbyname host in
if Array.length entry.Unix.h_addr_list = 0 then begin
failwith (Printf.sprintf "no address found for host %S\n" host)
end;
return (Unix.ADDR_INET (entry.Unix.h_addr_list.(0), port))
let test_connection ?(timeout=1.0) addr =
let fd = Lwt_unix.socket Unix.PF_INET Unix.SOCK_STREAM …Run Code Online (Sandbox Code Playgroud)