Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 如何正确处理bucklescript中原始js函数调用的结果类型_Types_Ocaml_Ffi_Bucklescript - Fatal编程技术网

Types 如何正确处理bucklescript中原始js函数调用的结果类型

Types 如何正确处理bucklescript中原始js函数调用的结果类型,types,ocaml,ffi,bucklescript,Types,Ocaml,Ffi,Bucklescript,Bucklescript允许定义原始js函数调用,但我不清楚应该如何处理返回类型。似乎可以使用任何类型,它仍然可以工作。例如,此代码编译和运行时不会出现问题: let f = [%raw {| function() { return 4; } |}] let x : (string option) list = f () 编译器不会抱怨x具有类型(字符串选项)列表或任何其他伪造类型。通常,我只依赖类型推断,但我想将原始js函数调用的结果分配给结构中的字段,因此我必须在结构类型

Bucklescript允许定义原始js函数调用,但我不清楚应该如何处理返回类型。似乎可以使用任何类型,它仍然可以工作。例如,此代码编译和运行时不会出现问题:

let f = [%raw {|
  function() {
    return 4;
  }
|}]

let x : (string option) list = f ()

编译器不会抱怨x具有类型<代码>(字符串选项)列表或任何其他伪造类型。通常,我只依赖类型推断,但我想将原始js函数调用的结果分配给结构中的字段,因此我必须在结构类型定义中为该字段定义类型。似乎我也可以使用任何类型,它仍然会工作。这是预期的行为吗?是否有处理这些情况的建议?

是的,这是预期行为。编译器不试图理解
raw
块的内容,这使得它们在一般情况下使用起来非常危险。如果出现语法错误,编译器不会抱怨

类型推断算法总是试图推断出最一般的类型,如果没有任何提示,则将。。。任何东西它甚至没有假设它是一个函数,因为它不一定是

%raw
是一个可以像任何其他表达式一样使用类型进行注释的表达式。魔法发生在它的内部,而不是外部。您可以直接为表达式指定类型:

let f = ([%raw {|
  function() {
    return 4;
  }
|}] : unit -> int)
或者在绑定上,就像您使用
x

let f : unit -> int = [%raw {|
  function() {
    return 4;
  }
|}]
看见