小编Atr*_*opo的帖子

F#匹配表达式和'as'模式

我正在研究一些F#并试图像本教程中那样实现一个解析器组合器; 在对提议的解决方案进行一些复制和粘贴之后,我尝试自己进行自定义.

当然有一些我错过了,但编译器给了我一个奇怪的错误信息.

type T<'a> =
    | A of string
    | B of 'a

let foo a b =
    match a with
    | A s as x -> x
    | B i ->
        match b with
        | A s as x -> x
        | B j ->
            B (i, j)
Run Code Online (Sandbox Code Playgroud)

上面的代码是我发现的问题的概括:在最后的结果(最里面的匹配表达式的B分支)中通知错误:

error FS0001: Type mismatch. Expecting a
    'a
but given a
    'a * 'b
The resulting type would be infinite when unifying ''a' and ''a * 'b'
Run Code Online (Sandbox Code Playgroud)

但如果我不使用该 …

f# pattern-matching

7
推荐指数
1
解决办法
121
查看次数

从事件中处理组合的可观察对象

我正在编写一个套接字服务器,它应该处理从连接到它的每个客户端收到的每条消息。

所有的消息都在一个可观察的队列中,所以它可以被订阅并在外面观察。

为了确保所有客户端套接字消息都放在同一个 observable 上,我使用了以下代码段:

private Subject<IObservable<Msg>> _msgSubject;
public IObservable<Msg> Messages { get; private set; }

public SocketServer()
{
    // ...
    // Initialization of server socket
    // ...
    _msgSubject = new Subject<IObservable<Msg>>();
    Messages = _msgSubject.Merge();
}

private void OnNewConnection(ISocket socket)
{
    var evtObservable = Observable.FromEvent<Action<byte[]>, byte[]>(action => action.Invoke, h => socket.OnMessage += h, h => socket.OnMessage -= h);

    _msgSubject.OnNext(evtObservable);
}
Run Code Online (Sandbox Code Playgroud)

现在,我检查了内存的(解除)分配,问题是即使套接字正确关闭,仍然有相对可观察对象的引用添加到主题中;此外,永远不会取消事件的注册。

那么,问题来了:有没有办法强制从主题中删除“socket observable”?

也许触发套接字 observable 的 OnComplete 的东西应该可以完成这项工作,但是如何呢?

c# system.reactive

5
推荐指数
1
解决办法
148
查看次数

RX - 指定速率的通知

我是RX的新手,我正面临"塑造通知流量"的问题.

我想知道如何通过给定的吞吐量通知观察者; 也就是说,我希望在自上次"OnNext"调用后经过一段给定时间之前调用"OnNext"方法.

为了完整起见:我希望通知序列中的每个元素.

例如,0.2符号/刻度:

Tick:        0         10        20        30
             |---------|---------|---------|
Producer:    A---B------C--D-----E-------F
Result:      A    B     C    D    E      F
             0    5     11   16   21     28
Run Code Online (Sandbox Code Playgroud)

有没有办法组成观察者或我必须实现我自己的主题?

非常感谢

system.reactive

3
推荐指数
1
解决办法
81
查看次数

标签 统计

system.reactive ×2

c# ×1

f# ×1

pattern-matching ×1