小编Mar*_*ijn的帖子

在Clojure中旋转列表列表矩阵

我是Clojure和函数式编程的新手.我对如何以功能方式处理这个问题感到茫然.

我有以下矩阵:

(def matrix [[\a \b \c]
             [\d \e \f]
             [\g \h \i]])
Run Code Online (Sandbox Code Playgroud)

我想把它变成这样的东西(逆时针旋转):

((\a \d \g)
 (\b \e \h)
 (\c \f \i ))
Run Code Online (Sandbox Code Playgroud)

我已经破解了这一点,它以正确的顺序给了我元素.如果我能以这种方式收集字符串中的数据,那么我可以将其与分区分开.但是我很确定doseq是错误的路径:

(doseq [i [0 1 2]]
  (doseq [row matrix]
    (println (get (vec row) i))))
Run Code Online (Sandbox Code Playgroud)

我已经涉足了嵌套的地图调用,但仍然坚持使用它.在Clojure中构建字符串或以更好的方式处理这个字符串的正确方法是什么?

clojure matrix

10
推荐指数
3
解决办法
2809
查看次数

Blazor 服务器:将 EF Core DbContextFactory 与 DbContext 混合使用

我正在为现有域层构建 Blazor 服务器前端。这一层提供了各种可注入的服务来对 EF Core 存储库进行修改。为此,服务本身从(标准 Microsoft)DI 容器请求 DbContext。这适用于具有作用域 DbContext 实例的常规 MVC.NET/Razor 页面,但如文档所述,这在 Blazor 中存在问题。在 Blazor 服务器应用程序中,我们希望使用 DbContextFactory 来为操作生成短期 DbContext 实例。

在同一个应用程序中同时拥有 DbContext 和 DbContextFactory 没有问题,但我很难理解如何调整我的服务。或者,如果我什至需要?为了说明,这是当前的代码:

我的页面:

@page “/items”
@inject ItemService ItemService

// somewhere in the code
    ItemService.DoOperation(…)
Run Code Online (Sandbox Code Playgroud)

我的服务

@page “/items”
@inject ItemService ItemService

// somewhere in the code
    ItemService.DoOperation(…)
Run Code Online (Sandbox Code Playgroud)

启动.cs:

class ItemService
{
    public ItemService(MyDbContext myDbContext)
    {
        …
    }

    public bool DoOperation(…)
    {
        …
        _myDbContext.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经根据此答案中给出的示例更改了 DbContext 的生命周期,到目前为止我还没有能够创建任何问题,但我不完全理解这里的生命周期问题。如何设计我的服务以明显的方式在 Blazor 和 MVC/Razor Pages 应用程序中运行良好?

c# entity-framework-core asp.net-core blazor .net-5

4
推荐指数
2
解决办法
360
查看次数

与赛璐珞保持多种联系的正确方法?

我目前正在开发一个从许多IMAP邮箱中提取邮件的应用程序.似乎赛璐珞对于这部分来说是一个合适的选择,但我不确定如何雇佣演员.

该应用程序将以分布式方式运行.有x个邮箱可以轮询,y个进程将被分割.因此,每个进程都有一个他们必须轮询的邮箱列表,这个列表会不时地改变.这意味着每个进程维护的连接池是动态的.

我最大的问题是:我应该为每个邮箱生成一个单独的ImapConnection actor,还是应该创建一个内部管理所有连接的ImapListener actor?

我目前的设计采用前一种解决方案.有一个中央协调员演员,它保持一组演员,每个演员管理一个imap连接.添加一个简单的新连接:

@connections << ImapConnection.supervise(account_info)
Run Code Online (Sandbox Code Playgroud)

ImapConnection定期轮询IMAP服务器,或维持IDLE连接.如果协调器想要停止轮询邮箱,它会在@connections数组中查找并正确处理它.

这对我来说似乎是一种合乎逻辑的方法,可以产生Celluloid的许多好处(例如自动重启崩溃的演员),但我很难找到使用这种方法的其他软件的例子.以这种方式产生100个演员正确使用演员模型还是应该使用不同的方法?

ruby celluloid

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