我有一个包含许多文件的项目,我希望它能与大多数流行的编译器一起使用.
不幸的是,PolyML和SML/NJ需要use语句,而MosML还需要使用loadpoly或sml无法识别的基础库结构.
最重要的是,MLton和MLKit需要一个完全不同的.mlb文件,只需列出文件名,并且还需要显式导入基础库,这是以与MosML不同的方式完成的:
$(SML_LIB)/basis/basis.mlb
Run Code Online (Sandbox Code Playgroud)
是否有一些标准的通用"包含此文件"命令,如果它不存在,是否有其他方法让所有编译器从一个入口点文件中读取?
PS不会介意有人对编译器差异进行小吵闹.我总是对人们的想法感兴趣,而且没有太多可用的信息:-)
我正在编写一个库来处理Standard ML中的简单图像.它应该支持用作每个像素的颜色的不同类型,例如bool,Word8.word等.
我有一个abstype 'a image所有常见的函数定义独立于表示('a是颜色表示),但输出格式不同,所以我想有不同的结构.
有没有办法"打开" abstype一个结构内部?我只能以非常丑陋的方式工作:
abstype 'clr absimage = Image of {width : int, height : int, data : 'clr array array}
with
fun createFunc (w, h) f = Image {width = w, height = h, data = ...}
fun createBlank (w, h) clr = createFunc (w, h) (fn _ => clr)
...
end
signature IMAGE = sig
type colour
type image
val createFunc : (int * int) -> (int * int -> …Run Code Online (Sandbox Code Playgroud) 我有两段代码,每个代码都按预期工作:
function Test() {}
let tmp = function() {
console.log(this)
}
tmp.call(Test)Run Code Online (Sandbox Code Playgroud)
和
function Test() {}
(function() {
console.log(this)
}).call(Test)Run Code Online (Sandbox Code Playgroud)
它们都产生预期的输出:[Function: Test].
但是,当组合这些独立的代码片段时,会产生错误.所以,运行以下代码
function Test() {}
let tmp = function() {
console.log(this)
}
tmp.call(Test)
(function() {
console.log(this)
}).call(Test)Run Code Online (Sandbox Code Playgroud)
结果是
TypeError: tmp.call(...) is not a function
Run Code Online (Sandbox Code Playgroud)
我找到了一个非优雅的解决方案,这为第二个代码片段添加了一个延迟.因此,以下将产生所需的输出([Function: Test]两次):
function Test() {}
let tmp = function() {
console.log(this)
}
tmp.call(Test)
setTimeout(() => {
(function() {
console.log(this)
}).call(Test)
}, 100);Run Code Online (Sandbox Code Playgroud)
该超时似乎解决它这一事实使我认为这是相关的一些异步的东西,但我无法解释究竟为什么发生.
我知道有一种方法可以使其.constructor.name与构造函数存储的变量不同
var Foo = function Bar() {};
console.log(new Foo().constructor.name) // => BarRun Code Online (Sandbox Code Playgroud)
我想知道是否有一种 hacky 方法可以将对象设置.constructor.name为不是有效 JS 函数名称的名称,例如"Hello::World".
直接设置好像不行:
function Foo() {};
Foo.prototype.constructor.name = "Test"
console.log(new Foo().constructor.name) // => FooRun Code Online (Sandbox Code Playgroud)
我尝试过使用Function构造函数来执行此操作,但它是使用eval,因此尽管传递了字符串,JS 也必须有效。
javascript ×2
sml ×2
constructor ×1
function ×1
functor ×1
mlton ×1
mosml ×1
polyml ×1
smlnj ×1
this ×1