我正在使用Flurl校准API。
//# models.fs
module models =
type Ticker = { Ask :decimal; Bid :decimal; Last: decimal; High :decimal; Timestamp :int; }
//# Client.fs
namespace MyLibrary
// ... some code
url.GetJsonAsync<models.Ticker>()
这有效,我可以访问ticker.Ask属性。
类模型。代码从另一个C#项目中可见,其构造是这样的:
public Ticker(decimal ask, decimal bid, decimal last, decimal high, int timestamp);
我不想公开models模块和Ticker类/记录,所以我将可见性更改为内部:
# models.fs
module internal models =
type Ticker = { Ask :decimal; Bid :decimal; Last: decimal; High :decimal; Timestamp :int; }
代码仍然可以“编译”,但是当我运行它时,我会遇到以下异常:
这是完整的代码示例,我是F#的新手,可能需要解释这个问题:
open Flurl.Http
// open mynamespace where is models
type IClient =
abstract member GetAsk : decimal
type MyClient() =
let getTicker () =
let url = "https://www.bitstamp.net/api/v2/ticker/XRPUSD"
url.GetJsonAsync<models.Ticker>()
interface IClient with
member __.GetAsk =
let ticker = getTicker().Result
ticker.Ask
我正在从C#项目中使用客户端。 我想知道Ticker的构造函数由于可见性而改变了。 但为什么? 如何保持Ticker类处于隐藏状态并使代码按预期工作?
[更新:使用课程]
使用课程
type internal Ticker(ask:decimal, bid :decimal, last: decimal, high :decimal, timestamp :int) =
member this.Ask = ask
按预期完成工作。
如果 internal 在外部不可见,但JsonDeserializer可以“使用”。
我仍然对使用记录时的行为感到困惑。