首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Reason (ReasonML)中使用[@bs.this] BuckleScript属性?

如何在Reason (ReasonML)中使用[@bs.this] BuckleScript属性?
EN

Stack Overflow用户
提问于 2017-07-04 03:56:10
回答 1查看 336关注 0票数 1

我正在尝试编写编译成这个JS的ReasonML:

代码语言:javascript
复制
function main(example) {
    example.foo = function() {
        console.log(this)
    }
}

我的理由是:

代码语言:javascript
复制
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]的行和列上得到一个语法错误。

代码语言:javascript
复制
File "/Users/maxwellheiber/dev/rerect/src/demo.re", line 6, characters 62-64:
Error: 742: <SYNTAX ERROR>

我正在关注@bs.this的BuckleScript文档。

与OCaml相比,使用BuckleScript绑定this的语法在原因上是否不同?以下具有BuckleScript属性的OCaml (不是Reason)编译为正确的JS时不会出错:

代码语言:javascript
复制
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))

如何合理地使用[@bs.this] BuckleScript属性来生成使用this的JS

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 02:37:43

是的,不幸的是,属性优先级和诸如此类的属性是微妙的不同。Reason Tools (它非常适合于转换像这样的小代码段)说这就是你想要的:

代码语言:javascript
复制
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]);

它将编译为

代码语言:javascript
复制
function main(example) {
  example.foo = (function () {
      var x = this ;
      console.log(x);
      return /* () */0;
    });
  return /* () */0;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44893067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档