我已经定义了一个接口和一个模块:
module type BASE =
sig
type 'a base
val ...
...
end
module base =
(struct
type 'a base
let ...
...
end: BASE)
Run Code Online (Sandbox Code Playgroud)
我想定义另一个DERIVED继承自的接口BASE,它包含所有类型和签名BASE,并有自己的类型和声明.然后我可以定义另一个Derived类型为的模块DERIVED.
谁能告诉我怎么做?它是否必然是OCaml的对象特征?
更进一步,是否可以更改类型的名称DERIVED:例如,它被调用'a derived而不是' a base?
我有一个.ml在我的定义中编译的列表makefile,完成后main/mail.ml.
我failwith "to do"在这些文件中有一些函数体.之前,我记得它只在运行时执行需要该函数时引发错误.
今天我所有的编译.ml工作正常:.cmi,cmx并且.o都产生.但是,当我启动主要的二进制文件,它似乎并没有先运行是什么let ()的main.ml,相反,它似乎检查首先列表的文件.ml中makefile,并提出Fatal error: exception Failure("to do") make: *** [all] Error 2当遇到第一个faiwith "to do".
我发现这种行为很奇怪,谁能告诉我可能是什么原因?我makefile或者有什么问题main.ml?
我有一个操作列表的算法,我想表达它的复杂性.
在算法中,我有List.mem a l一个循环,我不知道如何考虑复杂性List.mem,必须是O(List.length(l)),或者Ocaml可以做一些神奇的内部更好O(List.length(l))?
我打算编写一个编译器(包括解析器)OCaml来解析和运行VBA或/和VB程序.我已经为简单的命令式语言做了这个,但我不知道如何处理VBAor和VB... 的"对象"功能.
有谁知道我能激发的任何现有工作吗?
我使用的是 Windows 版 Microsoft Excel 2010。
我已经开发了一个加载项addin.xlam,其中包含一个 sub main. addin.xlam位于正确的位置,以便通过菜单可见和选择Developer -> Add-Ins。当我打开普通工作簿test.xlsm并按 时Alt + F11,我可以看到 的代码addin.xlam已加载。
我的目标是向 Excel 的菜单栏添加一个菜单项,以允许用户main启动add-in.xlam. 通过点击此链接,我的代码addin.xlam如下:
Option Explicit
Dim cControl As CommandBarButtonPrivate
Sub Workbook_AddinInstall()
On Error Resume Next 'Just in case
'Delete any existing menu item that may have been left.
Application.CommandBars("Worksheet Menu Bar").Controls("Super Code").Delete
'Add the new menu item and Set a CommandBarButton Variable to …Run Code Online (Sandbox Code Playgroud) 在录制的VBA宏中,似乎他们的公式使用R1C1 reference style.例如,填写B4有B2+1:
Range("B4").Select
ActiveCell.FormulaR1C1 = "=R[-2]C+1"
Run Code Online (Sandbox Code Playgroud)
有谁知道是否可以关闭此模式?例如,让录制的宏看起来像:
Range("B4").Select
ActiveCell.Formula = "=B2+1"
Run Code Online (Sandbox Code Playgroud) 我正在编写二维数组的基本函数.有两种方法可以编写"set"功能.第一个是制作矩阵的副本然后修改它:
let copy_matrix (m: 'a array array): 'a array array =
let l = Array.length m in
if l = 0 then m else
let result = Array.make l m.(0) in
for i = 0 to l - 1 do
result.(i) <- Array.copy m.(i)
done;
result
let set_copy (m: 'a array array) (r: int) (c: int) (v: 'a): 'a array array =
let m' = copy_matrix m in
m'.(r).(c) <- v;
m'
Run Code Online (Sandbox Code Playgroud)
第二个只是直接在矩阵上修改:
let set (m: 'a array array) (r: …Run Code Online (Sandbox Code Playgroud) 我经常需要在OCaml中打破一个循环,至少有两种方法:
(* by exception *)
try
for i = 0 to 100 do
...
if cond then raise BreakLoop
done;
...
with BreakLoop -> ...
(* by while *)
let cond = ref false in
let i = ref 0 in
while (not !cond) && (i<= 100) do
...
i := !i + 1
done;
if !cond then ...
Run Code Online (Sandbox Code Playgroud)
我最关心的是优化运行时间,只要程序易于阅读和理解即可.while当存在多个嵌套循环时,这种方式使循环变得复杂.
我在互联网上的某个地方看到,在OCaml中抛出和捕获异常代价很高.任何人都可以确认我是否属实?
所以我们有时应该采用这种while方式,有时使用exception方式?
我现在使用以下命令逐个打开一组工作簿:
Workbooks.Open Filename:=file, Password:=""
Run Code Online (Sandbox Code Playgroud)
通常文件not在read-only模式下打开,这就是我想要的.但是对于某些文件,前一行弹出以下窗口:
在这种情况下,我仍然想打开文件(cliking Yes),甚至认为会read-only.谁能告诉我如何通过命令VBA自动化这个选择,而不是点击?