2016-03-17 3 views
1

Часть библиотеки Я пытаюсь связать возвращает объект -связывание библиотеки: возвращение нетипизированным объект - определение метода

Editor.prototype.getHandlers = function() { 
    return { 
    'shape.append': require('./draw/AppendShapeHandler'), 
    'shape.create': require('./draw/CreateShapeHandler') 
    }; 
}; 

То, что я не могу понять, как определить тип класса, как возвращаемый объект является анонимным:

class type editor = object 
    method getHandlers : ? Js.t Js.opt Js.meth 
end 

Может ли кто-нибудь предложить здесь путь сюда?

Благодаря

Ник

+0

OCaml использует структурную типизацию для объектов. Тип объекта не нуждается в имени, это просто для удобства. Тип объекта выглядит следующим образом: ' '. –

+0

Спасибо. Я просто старался не указывать поля типа объекта и использовать какую-то форму фантомного типа. – njb

ответ

0

В этом случае, возможно, что-то вроде:

class type editor = object 
    method getHandlers : <shape_append : Js.js_string Js.t Js.meth> Js.t Js.meth 
end 

Еще пример:

class type server = object 
    method listen : int -> (unit -> unit) Js.callback -> unit Js.meth 
    method close : (unit -> unit) Js.callback -> unit Js.meth 
    method address : 
      <address: Js.js_string Js.t Js.readonly_prop; 
      family : Js.js_string Js.t Js.readonly_prop; 
      port: Js.js_string Js.t Js.readonly_prop> Js.t Js.meth 
end 

Такой подход, связывающий этот путь, работает, но, как Я узнал в своих привязках OCaml nodejs, лучше писать на более высоком уровне, а не делать ese привязки. https://github.com/fxfactorial/ocaml-nodejs (Посмотрите на раннюю историю git для многих других подобных примеров)

+1

Спасибо за пример. Ваши привязки nodejs были чрезвычайно полезны - не могу дождаться, когда кто-нибудь напишет генератор ocaml для wast/wasm - надеюсь, вам понравился Марракеш - хотелось бы, чтобы я был там. – njb