Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
Javascript 如何使用from Fable定义和调用多参数函数_Javascript_F#_Fable F# - Fatal编程技术网

Javascript 如何使用from Fable定义和调用多参数函数

Javascript 如何使用from Fable定义和调用多参数函数,javascript,f#,fable-f#,Javascript,F#,Fable F#,我尝试使用2个参数调用Redux.createStore,以下代码简化了签名,但我无法让FSharp理解我想要的内容: [<Import("*","Redux")>] module redux = let createStore: (System.Func<int,int> -> int) = jsNative let store = redux.createStore 22//no idea what to do here [] 模块redux= 让c

我尝试使用2个参数调用Redux.createStore,以下代码简化了签名,但我无法让FSharp理解我想要的内容:

[<Import("*","Redux")>]
module redux =
    let createStore: (System.Func<int,int> -> int) = jsNative

let store = redux.createStore 22//no idea what to do here
[]
模块redux=
让createStore:(System.Func->int)=jsNative
让store=redux.createStore 22//不知道在这里做什么
假设我想将createStore定义为一个接受2个整数的函数,而不是一个接受2个整数的元组,也不是一个接受1个整数并返回一个接受1个整数的函数(部分应用2个整数)。不,它是一个本机函数,接受2个参数(比如int)并返回一个int

在这些示例中,有一个redux示例,它只使用一个参数

显示了如何创建包含多个参数的函数,但没有显示如何定义类型,也没有显示如何调用此类函数

该示例确实显示了具有多个参数的定义,但从未调用它,因此仍然不知道如何调用具有多个参数的js函数。

根据您的评论:

我试图弄清楚如何定义一个js函数,它接受两个参数并用两个参数调用它

答案是,照你说的做:

[<Import("*","Redux")>]
module redux =
    let createStore (a: int, b: int): int = jsNative

let store = redux.createStore (22, 42)
[]
模块redux=
让createStore(a:int,b:int):int=jsNative
let store=redux.createStore(22,42)
除了代码示例之外,我无法添加任何其他内容,因为我不确定您的实际问题是:您是否发现了一些不明显的问题(什么?),或者您是否尝试了这个方法,但不知怎么它不起作用(如何?),或者其他问题(什么?)。

根据您的评论:

我试图弄清楚如何定义一个js函数,它接受两个参数并用两个参数调用它

答案是,照你说的做:

[<Import("*","Redux")>]
module redux =
    let createStore (a: int, b: int): int = jsNative

let store = redux.createStore (22, 42)
[]
模块redux=
让createStore(a:int,b:int):int=jsNative
let store=redux.createStore(22,42)

除了代码示例之外,我不能添加任何其他内容,因为我不确定您的实际问题是什么:您是否发现了一些不明显的问题(什么?),或者如果您尝试了这个方法,但不知为什么它不起作用(如何?),或者其他问题(什么?).

真的厌倦了试图定义一种F#和Fable都能理解的类型,然后试图称之为

现在,我创建了一个名为JSI.js的JavaScript文件:

/**
 * JavaScipt Interop to call complex JavaScipt library methods 
 * where I have no clue how to define the type for in F#/Fable
 */
define(["exports","redux"],function(exports,Redux){
  exports.createStore = 
    (fn)=>
    (initialStore)=>{
      return Redux.createStore(
        (action,state)=>fn(action)(state)
        ,initialStore
      );
    }
});
然后在main.fsx中:

[<Import("*","../js/JSI")>]
module JSI =
    let createStore: 
      (
        (AppController.ApplicationModel -> Action -> AppController.ApplicationModel)
          -> AppController.ApplicationModel
          -> int
      ) = jsNative

let store = 
  JSI.createStore 
    applicationHandler
    AppController.defaultModel
[]
模块JSI=
让createStore:
(
(AppController.ApplicationModel->Action->AppController.ApplicationModel)
->AppController.ApplicationModel
->int
)=jsNative
让存储=
JSI.createStore
应用程序处理程序
AppController.defaultModel

这会将F#部分应用的函数包装/展开到具有多个参数的对象上,以供Redux使用。

对尝试定义F#和Fable理解的类型感到厌倦,然后尝试调用它

现在,我创建了一个名为JSI.js的JavaScript文件:

/**
 * JavaScipt Interop to call complex JavaScipt library methods 
 * where I have no clue how to define the type for in F#/Fable
 */
define(["exports","redux"],function(exports,Redux){
  exports.createStore = 
    (fn)=>
    (initialStore)=>{
      return Redux.createStore(
        (action,state)=>fn(action)(state)
        ,initialStore
      );
    }
});
然后在main.fsx中:

[<Import("*","../js/JSI")>]
module JSI =
    let createStore: 
      (
        (AppController.ApplicationModel -> Action -> AppController.ApplicationModel)
          -> AppController.ApplicationModel
          -> int
      ) = jsNative

let store = 
  JSI.createStore 
    applicationHandler
    AppController.defaultModel
[]
模块JSI=
让createStore:
(
(AppController.ApplicationModel->Action->AppController.ApplicationModel)
->AppController.ApplicationModel
->int
)=jsNative
让存储=
JSI.createStore
应用程序处理程序
AppController.defaultModel

这会将部分应用的函数包装/展开到具有多个参数的对象上,以供Redux使用。

您的
createStore
函数是一个只有一个参数的函数:它接受一个函数并返回一个
int
。你确定这就是你的意思吗?@FyodorSoikin为了简单起见,让我们假设createStore接受2个参数:1:(a:int,b:int):int(类型脚本表示法,因此没有元组或部分应用,只有2个参数)。还有一个int。它将返回一个int。实际上,它将采用不同的类型(),但现在让我们保持简单,因为我正试图找出如何定义一个包含2个参数的js函数,并使用2个参数调用它。@FyodorSoikin;谢谢你的回复。我试图了解transpiling typescript定义的作用,但它似乎将接受多个参数的JS函数的定义转换为接受元组的函数(一个元组参数),因为createStore来自外部库(redux),我必须为Fable提供一个定义,因为我想调用函数,所以我需要调用它。这里很晚了,所以我明天要睡觉再检查。你的
createStore
函数是一个单参数函数:它接受一个函数并返回一个
int
。你确定这就是你的意思吗?@FyodorSoikin为了简单起见,让我们假设createStore接受2个参数:1:(a:int,b:int):int(类型脚本表示法,因此没有元组或部分应用,只有2个参数)。还有一个int。它将返回一个int。实际上,它将采用不同的类型(),但现在让我们保持简单,因为我正试图找出如何定义一个包含2个参数的js函数,并使用2个参数调用它。@FyodorSoikin;谢谢你的回复。我试图了解transpiling typescript定义的作用,但它似乎将接受多个参数的JS函数的定义转换为接受元组的函数(一个元组参数),因为createStore来自外部库(redux),我必须为Fable提供一个定义,因为我想调用函数,所以我需要调用它。这里很晚了,所以我明天要去睡觉,再检查一下。是的,行了,谢谢;但现在applicationHandler部分应用。我添加了一个带有完整类型注释的答案(除了应该是Redux.store的返回类型)。使用JS互操作文件将部分应用的函数包装/展开到与Redux一起工作的东西上;但现在applicationHandler部分应用。我添加了一个带有完整类型注释的答案(返回类型应为Redux.store除外)