如何在 Reason (ReasonML) 中使用 [@bs.this] BuckleScript 属性?
How do I use the [@bs.this] BuckleScript attribute in Reason (ReasonML)?
我正在尝试编写编译为这个 JS 的 ReasonML:
function main(example) {
example.foo = function() {
console.log(this)
}
}
这是我的理由:
let module Example = {
type t;
external set_foo_method : t => (t => unit [@bs.this]) => unit = "foo" [@@bs.set];
};
let main = fun example => Example.set_foo_method example (fun [@bs.this] x => {
Js.log(x);
});
第二个 [@bs.this]
的行和列出现语法错误。
File "/Users/maxwellheiber/dev/rerect/src/demo.re", line 6, characters 62-64:
Error: 742: <SYNTAX ERROR>
我正在关注 @bs.this 的 BuckleScript 文档。
与 OCaml 相比,使用 BuckleScript 绑定到 this
的语法在 Reason 中是否不同?以下具有 BuckleScript 属性的 OCaml(不是 Reason)可以正确编译为正确的 JS:
module Example = struct
type t
external set_foo_method : t -> (t -> unit [@bs.this]) -> unit = "foo" [@@bs.set]
end
let main example = Example.set_foo_method example (fun [@bs.this] x -> Js.log(x))
如何使用Reason中的[@bs.this]
BuckleScript属性生成使用this
的JS?
是的,不幸的是,属性优先级等略有不同。 Reason Tools(这非常适合转换像这样的小片段)说这就是你想要的:
module Example = {
type t;
external set_foo_method : t => (t => unit) [@bs.this] => unit = "foo" [@@bs.set];
};
let main example => Example.set_foo_method example ((fun x => Js.log x) [@bs.this]);
它将编译为
function main(example) {
example.foo = (function () {
var x = this ;
console.log(x);
return /* () */0;
});
return /* () */0;
}
我正在尝试编写编译为这个 JS 的 ReasonML:
function main(example) {
example.foo = function() {
console.log(this)
}
}
这是我的理由:
let module Example = {
type t;
external set_foo_method : t => (t => unit [@bs.this]) => unit = "foo" [@@bs.set];
};
let main = fun example => Example.set_foo_method example (fun [@bs.this] x => {
Js.log(x);
});
第二个 [@bs.this]
的行和列出现语法错误。
File "/Users/maxwellheiber/dev/rerect/src/demo.re", line 6, characters 62-64:
Error: 742: <SYNTAX ERROR>
我正在关注 @bs.this 的 BuckleScript 文档。
与 OCaml 相比,使用 BuckleScript 绑定到 this
的语法在 Reason 中是否不同?以下具有 BuckleScript 属性的 OCaml(不是 Reason)可以正确编译为正确的 JS:
module Example = struct
type t
external set_foo_method : t -> (t -> unit [@bs.this]) -> unit = "foo" [@@bs.set]
end
let main example = Example.set_foo_method example (fun [@bs.this] x -> Js.log(x))
如何使用Reason中的[@bs.this]
BuckleScript属性生成使用this
的JS?
是的,不幸的是,属性优先级等略有不同。 Reason Tools(这非常适合转换像这样的小片段)说这就是你想要的:
module Example = {
type t;
external set_foo_method : t => (t => unit) [@bs.this] => unit = "foo" [@@bs.set];
};
let main example => Example.set_foo_method example ((fun x => Js.log x) [@bs.this]);
它将编译为
function main(example) {
example.foo = (function () {
var x = this ;
console.log(x);
return /* () */0;
});
return /* () */0;
}