Невозможно разрушить Функтор (Модуль)

Этот синтаксис был бы очень полезен - есть ли причина для этого не работает? Спасибо!

module Foo = {
  let bar: string = "bar"
};

let bar = Foo.bar; /* works */
let { bar } = Foo; /* Unbound record field bar */

Попробуйте онлайн!

2 ответа

Решение

Самое близкое, что вы можете сделать, это что-то вроде этого:

module Foo = {
  let bar = "bar";
  let baz = "baz";
};

let (bar, baz) = Foo.(bar, baz);

Невозможно деструктурировать модуль в OCaml/Reason.

Эквивалентный код OCaml выдает синтаксическую ошибку в строке 3

module Foo = struct let bar: string = "bar" end
let bar = Foo.bar
let struct bar end = Foo

File "", line 3, characters 4-10: Error: Syntax error

Если вы согласны перенести все значения, указанные в Foo, в локальную область, то вы можете использовать open Foo, https://reasonml.github.io/try.html?reason=LYewJgrgNgpgBAMRCOBeOBvOsAucBGAhgE4BccAzjsQJYB2A5mnAERHEtwC+A3AFAgADjDqJk-AFIUAdFBAMAFOwCUQA

module Foo = { let bar: string = "bar" };
open Foo;
Js.log(bar)

Если вы также хотите экспортировать все определения в Foo через экспорт текущих модулей, вы можете include Foo, https://reasonml.github.io/try.html?reason=LYewJgrgNgpgBAMRCOBeOBvOsAucBGAhgE4BccAzjsQJYB2A5mnAERHEtwC+A3AFD0AxlAhh4SEPwBSFAHRQQDABTsAlEA

module Foo = { let bar: string = "bar" };
include Foo;
Js.log(bar)
Другие вопросы по тегам