我是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中构建字符串或以更好的方式处理这个字符串的正确方法是什么?
我正在为现有域层构建 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 应用程序中运行良好?
我目前正在开发一个从许多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个演员正确使用演员模型还是应该使用不同的方法?