簡體   English   中英

如何從寓言中定義和調用多參數函數

[英]How to define and call a multi argument function with from Fable

我正在嘗試使用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

因此,可以說我想將createStore定義為一個接受2個整數的函數,而不是2個整數的元組,也不定義一個接受一個int並返回接受一個int的函數的函數(部分應用2個int)。 不,這是一個帶有2個參數(例如int)並返回int的本機函數。

在示例中,有一個redux示例,該示例僅使用一個參數。

文檔顯示了如何創建帶有多個參數的函數,但不介紹如何定義類型或如何調用此類函數。

該示例確實顯示了具有多個參數的定義,但從未調用過它,因此仍然不知道如何調用帶有多個參數的js函數。

根據您的評論:

我試圖弄清楚如何定義一個接受2個參數並用2個參數調用它的js函數。

答案是,完全按照您說的做:

[<Import("*","Redux")>]
module redux =
    let 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

這會將F#部分應用的函數包裝/解包到Redux要使用的具有多個參數的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM