小编Che*_*vas的帖子

为什么我的第二段F#异步代码工作,但第一部分没有?

注意:我不是一个专业的软件开发人员,但是我写了很多不使用异步的代码,所以如果这个问题真的很直接,我很抱歉.

我正在与用C#编写的库连接.有一个特殊的函数(让我们称之为'func')返回'Threading.Tasks.Task>'

我正在使用func在F#中构建一个库.我在控制台应用程序中测试了以下代码,它工作正常.

let result = 
        func()
        |> Async.AwaitTask
        |> Async.RunSynchronously
        |> Array.ofSeq
Run Code Online (Sandbox Code Playgroud)

但是,当我从WinForms应用程序运行它(这最终是我想要做的)时,表单代码中的执行块永远不会返回.

所以我搞乱了代码,并尝试了以下,这是有效的.

let result = 
        async{
            let! temp = 
                func()
                |> Async.AwaitTask

            return temp
        } |> Async.RunSynchronously |> Array.ofSeq
Run Code Online (Sandbox Code Playgroud)

为什么第一个片段不起作用?为什么第二个片段有效?这个页面上有什么内容可以回答这些问题吗?如果是这样,那似乎并不明显.如果没有,你能指点我到哪儿吗?

f# multithreading task-parallel-library async-await

10
推荐指数
1
解决办法
235
查看次数

为什么 Dapper 在执行查询时需要对事务的引用?

只需浏览本教程:https : //www.davepaquette.com/archive/2019/02/06/managing-transactions-in-dapper.aspx

我的理解(没有 Dapper)是一旦你有一个连接,你可以打开一个事务,然后执行一堆语句,然后提交或回滚事务。这些查询不需要引用事务,因为连接已经“知道”了它。

那么为什么每次执行某些操作时,Dapper 都需要事务?

c# dapper

9
推荐指数
1
解决办法
247
查看次数

我可以对ReleaseComObject有所了解吗?我可以忽略它吗?

我一直在VBA开发办公室解决方案已有一段时间了,并且对VBA中的办公室开发有相当完整的了解.我已经决定是时候用.Net学习一些真正的编程了,并且遇到了一些问题.

浏览了大量文章和论坛(此处和其他地方),在使用COM对象时,似乎有一些关于.Net内存管理的混合信息.

有人说我应该总是确定性地释放COM对象,而其他人说我几乎不应该这样做.

人们说我应该这样做:

第861页的"专业Excel开发"一书.

这个堆栈交换问题已经回答说"必须释放你对COM对象的每个引用.如果你没有,那么进程将留在内存中"

这篇博客建议使用它来解决他的问题.

人们说我不应该这样做:

这篇由Eric Carter撰写的MSDN博客指出"在VSTO场景中,您通常不必使用ReleaseCOMObject."

由Eric Carter共同撰写的"VSTO for Office 2007"本书似乎没有提及任何内存管理或ReleaseComObject.

这篇由Paul Harrington撰写的MSDN博客说不要这样做.

有混合建议的人:

Jake Ginnivan说我应该总是在没有离开方法范围的COM对象上做这件事.如果COM对象离开方法范围,则忘记它.为什么我不能一直忘记它呢?

Paul Harrington的博客似乎暗示MS的建议在过去的某个时候发生了变化.调用ReleaseCOMObject曾经是最佳实践,但现在不是了吗?我可以将更精细的内存管理细节留给MS,并假设一切都很好吗?

.net c# com vsto com-interop

6
推荐指数
1
解决办法
332
查看次数

CNTK“时间”功能到底如何工作?

通过本教程,我正在自学CNTK 。

有一个功能定义为

def linear_layer(input_var, output_dim):

    input_dim = input_var.shape[0]
    weight_param = C.parameter(shape=(input_dim, output_dim))
    bias_param = C.parameter(shape=(output_dim))

    mydict['w'], mydict['b'] = weight_param, bias_param

    return C.times(input_var, weight_param) + bias_param
Run Code Online (Sandbox Code Playgroud)

在线性代数中,将两个矩阵相乘时,只有内部尺寸匹配时才有意义。更明确地说,左侧的第二维必须等于右侧的第一维。

在此函数中,“ times”函数的第2个(右)参数为“ weight_param”,其第一个尺寸设置为与第一个(左)参数的第一个尺寸相同。这不会起作用,因为内部尺寸不匹配。

我不确定input_var是(nx 2)还是(2 xn),但是无论哪种方式都会导致错误。如果它是(nx 2),则weight_param是(nx 2)和(nx 2)*(nx 2)不应计算。如果为(2 xn),则weight_param为(2 x 2),并且不应计算(2 xn)*(2 x 2)。

但是以某种方式,它运行得很好。更令人困惑的是,如果我将函数的最后一行更改为

return C.times_transpose(input_var, weight_param) + bias_param
Run Code Online (Sandbox Code Playgroud)

它产生exaclty相同的结果。

那么这是怎么回事?为什么这样做?为什么转置版本产生相同的结果?

PS:我正在与cntk同时教自己使用python,因此这些观察结果可能由python引起的。让我知道。

python linear-algebra matrix-multiplication cntk

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

有没有办法强制Haskell代码排序像F#一样工作?

我正在学习一个Haskell,所以非常好.

对于F#我非常流利,我想尝试纯函数式编程.

我一直喜欢F#的一个特点是你的代码顺序很重要.您无法调用尚未定义的函数.这很有用,因为它可以保证早期的代码文件包含低级函数,后来的代码包含更大的图片.它迫使我现在认为是一件好事的结构.

Haskell似乎并不太关心代码顺序.虽然我可以选择构建我的代码,但我并没有被迫.所以在学习Haskell的早期阶段,我想知道是否有一些编译器选项强制这个?

f# haskell

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

为什么我要使用即将到来的 let!... 和!句法?

语言的建议指出,其优点是在链接的文件中详述。我快速浏览了一下,但看不到它的明确说明。

优点是每个语句都并行执行,所以我可能会得到速度提升?或者它是否满足某种逻辑,使用通常的 monadic 不方便let!

我明白,这是适用的,这意味着它带有我不能使用以前的表达式来确定后续表达式的逻辑的限制。那么这是否意味着权衡是效率的灵活性?

monads f# applicative

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

在F#中使用免费monad是否意味着更高的启动时间和有限的指令?

我正在阅读Mark Seemann的这篇优秀文章.

在其中,他简单地演示了如何使用自由monad来使用纯函数来模拟交互.

我理解它足以能够编写这样的程序,我可以理解这种方法的优点.虽然有一点代码,但我想知道它的含义.

let rec bind f = function
    | Free instruction -> instruction |> mapI (bind f) |> Free
    | Pure x -> f x
Run Code Online (Sandbox Code Playgroud)

该函数是递归的.

  1. 鉴于这不是尾递归,这是否意味着我包含的指令数量受到堆栈空间的限制,因为每次我添加一条指令时,它必须打开整个东西才能添加它?
  2. 与上述类似,这是否意味着更高的启动时间,因为每个新指令都需要进一步下载才能添加?它可能是微不足道的,但这不是问题的重点; 我试图理解这个理论,而不是实用性.
  3. 如果上述问题的答案为"是",那么是否会有另一种实现方式(按照您希望的顺序列出指令列表,然后按相反的顺序处理列表,使每条指令都添加到顶部你的程序,而不是深入底部)更可取吗?

我可能(可能)错过了一些基本的东西,这意味着递归永远不会走得太远,请让我知道.

monads recursion f# abstract-syntax-tree

4
推荐指数
1
解决办法
176
查看次数

我对静态特征界限的理解是否正确?

我正在使用规范 ECS 库,并且我有以下类型

trait TradeableResource{}

#[derive(Component)]
struct MarketMaker<T: TradeableResource + std::marker::Send + std::marker::Sync + 'static>{
    lot_size:T
}
Run Code Online (Sandbox Code Playgroud)

如果没有约束,则无法编译'static。我最初担心这意味着这个结构体的所有值都必须在程序的整个生命周期中存在, 环顾 四周,这种担心似乎是无效的。这些链接清楚地涉及该主题,但我觉得它们没有使用为我提供清晰的心理模型的语言。所以我想就这个话题发表我自己的声明,你告诉我我是否正确。

我的声明

通过使用'static约束,任何填充 位置的类型T必须

  1. 完全由拥有的价值组成,或者
  2. 如果它包含引用值,则这些值必须与程序的生命周期一样长。

因此,以下具体情况不需要任何东西来维持程序的整个生命周期

#[derive(Component)]
struct Food(f64);
impl TradeableResource for Food{}

fn main() {
    let mut world = World::new();
    world.register::<MarketMaker<Food>>();

    world.create_entity().with(MarketMaker { lot_size: Food(4.0)}).build();
}
Run Code Online (Sandbox Code Playgroud)

因为该类型Food仅包含拥有的值,没有引用。

我说得对吗?

traits rust

4
推荐指数
1
解决办法
280
查看次数

F#计算表达式:可以用一个来简化这段代码吗?

我最近开始使用计算表达式来简化我的代码.到目前为止,对我来说唯一有用的是MaybeBuilder,因此定义:

type internal MaybeBuilder() =

    member this.Bind(x, f) = 
        match x with
        | None -> None
        | Some a -> f a

    member this.Return(x) = 
        Some x

    member this.ReturnFrom(x) = x
Run Code Online (Sandbox Code Playgroud)

但我想探索其他用途.一种可能性是我目前面临的情况.我有供应商提供的一些定义对称矩阵的数据.为了节省空间,仅给出矩阵的三角形部分,因为另一侧只是转置.所以,如果我在csv中看到一行代码

abc,def,123

这意味着行abc和列def的值是123.但是我不会看到像这样的行

def,abc,123

因为矩阵的对称性质已经给出了这个信息.

我已经在a中加载了所有这些数据,Map<string,Map<string,float>>并且我有一个函数可以获得任何看起来像这样的条目的值:

let myLookupFunction (m:Map<string,Map<string,float>>) s1 s2 =
    let try1 =
        match m.TryFind s1 with
        |Some subMap -> subMap.TryFind s2
        |_ -> None

    match try1 with
    |Some f -> f
    |_ ->
        let try2 =
            match m.TryFind s2 with
            |Some subMap -> subMap.TryFind …
Run Code Online (Sandbox Code Playgroud)

f# computation-expression

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

将一元函数映射到列表 - 为什么并不总是需要 `each`?

我正在学习有关 q 的教程。这是初始设置。

buys:2 1 4 3 5 4
sells:2 4 3 2
Run Code Online (Sandbox Code Playgroud)

然后我定义了以下函数

f:{x & (sums buys)}
Run Code Online (Sandbox Code Playgroud)

我尝试用它

f (sums sells)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误

'length
  [1]  f:{x & (sums buys)}
Run Code Online (Sandbox Code Playgroud)

我注意到如果我这样做,它会起作用

q)f each (sums sells)
2 2 2 2  2  2
2 3 6 6  6  6
2 3 7 9  9  9
2 3 7 10 11 11
Run Code Online (Sandbox Code Playgroud)

但是,以下输出列表的一元函数应用起来没有问题

q){(x*x;x)} (1 2 3)
1 4 9
1 2 3
Run Code Online (Sandbox Code Playgroud)

这两个函数的类型签名对我来说似乎是相同的。为什么其中一个得到评估,而另一个则引发错误?

kdb

2
推荐指数
1
解决办法
171
查看次数

如何有效地获取小于某个索引号的值的计数(从列表中)?

我很难用语言描述这个函数的作用,但我有一些工作代码。

f:{[n;k] sum flip k </: til n}
i:i: 3 4 6 7 13;
f[30;i]
0 0 0 0 1 2 2 3 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5i
Run Code Online (Sandbox Code Playgroud)

担心flip对于大输入值,该操作可能会很昂贵。有没有一种方法可以在不翻转的情况下更有效地做到这一点?

同样简洁将是一个很好的选择。

kdb

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

如何从Visual Studio连接到Synology Server上的MariaDB

我想构建一个使用数据库的应用程序。我有一个Synology服务器,我想将其用作数据库服务器。我想使用Visual Studio在.Net中构建应用程序。我已经安装了MariaDB和phpMyAdmin。已经有一个名为“ test”的数据库。我创建了一个名为“ Chechy”的用户,并将其设置为能够从任何主机进行连接。我无法使用“ Chechy”登录phpMyAdmin,不确定我是否应该能够登录,但出现错误#1045。用“ root”登录;工作正常。

我应该在此屏幕中输入什么才能使其正常工作。我已经尝试了服务器名称(使用和不使用双反斜杠),并且尝试使用服务器的内部IP地址。不用说,到目前为止没有任何工作。

添加连接

database-connection visual-studio mariadb synology

0
推荐指数
1
解决办法
1万
查看次数

根据布尔列表中的值合并 2 个列表

我有一种实现此目标的方法,这也解释了我的问题。

a:1 2 3 4;
b:5 6 7;
cond:1101001b;
comb:(count cond) # 0N;
comb[where cond]:a;
comb[where not cond]:b
Run Code Online (Sandbox Code Playgroud)

但是 q 有很多用于操作列表的实用程序,我想知道是否有更直接的方法来做到这一点。

kdb

0
推荐指数
1
解决办法
143
查看次数