小编dha*_*ech的帖子

功能与方法

我对F#很新.我注意到的第一件事是收集操作被定义为函数而不是方法.

作为实验,我在以下方面定义了几种方法list:

type List<'a> with
    member this.map f = List.map f this
    member this.filter f = List.filter f this
Run Code Online (Sandbox Code Playgroud)

然后,给这些助手:

let square x = x * x

let isEven n = n % 2 = 0
Run Code Online (Sandbox Code Playgroud)

这是使用方法的一个例子:

[1 .. 10].filter(isEven).map(square)
Run Code Online (Sandbox Code Playgroud)

这是传统方式:

[1 .. 10] |> List.filter isEven |> List.map square
Run Code Online (Sandbox Code Playgroud)

所以简洁明了并不是选择函数而不是方法的理由.:-)

从图书馆设计的角度来看,为什么选择函数而不是方法呢?

我的猜测是因为你可以传递List.filter,但是不能真正传递filter方法,除非它"绑定"到列表或包含在匿名函数中(即(fun (ls : 'a list) -> ls.filter)有效地将filter方法转换回函数list).

然而,即使有这个原因,似乎最常见的直接调用操作的情况会使方法更受欢迎,因为它们更简洁.所以我想知道是否还有其他原因.

编辑:

我的第二个猜测是功能专业化.也就是说,专门化List.filter(例如let evens List.filter isEven …

f#

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

Racket FFI:C函数,接受指向函数的指针

我想绑定到一个C函数,abc其签名是:

int abc(void (*)(int))
Run Code Online (Sandbox Code Playgroud)

即它接受指向函数的指针.此回调接受int并具有void返回类型.

Racket中的正确咒语是什么?

ffi racket

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

是否有短路'或'返回第一个'真实'值?

Scheme有一个短路or,它将返回第一个非假值:

> (or 10 20 30)
10
> (or #f 20 30)
20
> (or #f)
#f
Run Code Online (Sandbox Code Playgroud)

在需要之前,它不会评估其参数.

在PowerShell中是否有这样的东西?

这是它的近似值:

function or ()
{
    foreach ($arg in $args) {
        $val = & $arg; if ($val) { $val; break }
    }
}
Run Code Online (Sandbox Code Playgroud)

例:

PS C:\> or { 10 } { 20 } { 30 }
10
Run Code Online (Sandbox Code Playgroud)

例:

PS C:\> $abc = $null

PS C:\> or { $abc } { 123 }
123

PS C:\> $abc = 456

PS C:\> …
Run Code Online (Sandbox Code Playgroud)

powershell short-circuiting

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

re.pl:变量在块内没有正确范围

例:

~ $ re.pl
$ { my $abc = 10 ; $abc }
10
$ $abc
10
$ 
Run Code Online (Sandbox Code Playgroud)

这是记录在案的问题吗?

perl read-eval-print-loop

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

Rails教程:不推荐使用before_filter

Rails教程的10.2.1部分使用了before_filter不推荐使用的部分.编写代码UsersController以便不使用的现代惯用方法是before_filter什么?

edit是我尝试的版本:

  def edit
    if ( signed_in? )
      @title = "Edit user"
    else
      deny_access
    end
  end
Run Code Online (Sandbox Code Playgroud)

但是,这会在我运行rspec时触发2次失败.

rspec ./spec/requests/friendly_forwardings_spec.rb:6 # FriendlyForwardings should forward to the requested page after signin
rspec ./spec/controllers/users_controller_spec.rb:266 # UsersController authentication of edit/update pages for non-signed-in users should deny access to 'edit'
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-3 railstutorial.org

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

接受预期Func的FSharpFunc

正如在这个问题中提到的,期望a的方法Func不接受F#函数值.

重载一个方法以便接受F#函数值的好方法是什么?

.net extension-methods f# func

3
推荐指数
2
解决办法
558
查看次数

Int的数组与Int的数组的数组

我想要一个多子,其中一个用于Ints数组,另一个多子用于Ints数组.

这似乎可以解决问题:

multi sub abc(Int @array) { say 10; }

multi sub abc(Array[Int] @array) { say 20; }
Run Code Online (Sandbox Code Playgroud)

但是,构建满足这些约束的文字是非常冗长的:

abc Array[Int].new([1,2,3]);   # -> 10

abc Array[Array[Int]].new([Array[Int].new([1,2,3]), Array[Int].new([2,3,4])]);   # -> 20
Run Code Online (Sandbox Code Playgroud)

理想情况下,我只能说:

abc [1,2,3]
abc [[1,2,3], [2,3,4]]
Run Code Online (Sandbox Code Playgroud)

有没有办法构建一个abc如上所示可以调度而没有所有显式类型注释的方法?

可以multi sub设置为在运行时调度吗?

perl6

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

构建 Jonesforth - asm/unistd.h:没有这样的文件或目录

当尝试在 Ubuntu 16.04.4 64 位(Xenial Xerus)上构建Jonesforth (32 位 GNU 汇编程序)时,我看到以下内容:

~/src/jonesforth $ make
gcc -m32 -nostdlib -static -o jonesforth jonesforth.S
jonesforth.S:1154:24: fatal error: asm/unistd.h: No such file or directory
compilation terminated.
Makefile:11: recipe for target 'jonesforth' failed
Run Code Online (Sandbox Code Playgroud)

查看文件jonesforth.S,我注意到以下几行:

//#include <asm-i386/unistd.h>  // You might need this instead
#include <asm/unistd.h>
Run Code Online (Sandbox Code Playgroud)

我尝试过使用asm-i386/unistd.h它,但这似乎也没有帮助。

最好的做法是通过安装更多标头sudo apt install linux-headers...吗?如果是这样,我应该选择哪个?应该linux-headers-generic够了吧?

jonesforth.S或者,我应该更改所指的标题吗?

ubuntu assembly gcc gnu-assembler forth

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

关闭vscode中的某些hlint规则

我安装了以下适用于 Haskell 的 Visual Studio Code 扩展:

在此输入图像描述

elem如果我以前缀形式使用:

(elem n primes)
Run Code Online (Sandbox Code Playgroud)

我得到一个蓝色的波浪线,表明中缀形式:

在此输入图像描述

hlint(refact:Use infix)有没有办法只针对这个文件或项目关闭这个特定的hlint规则?

haskell visual-studio-code

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

通过 EF Core 将 1.3GB CSV 文件导入 sqlite

CSV 文件

我有一个大小约为 1.3 GB 的 CSV 文件:

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         10/4/2021   1:23 PM     1397998768 XBTUSD.csv
Run Code Online (Sandbox Code Playgroud)

这是 Kraken 交易所上比特币交易数据的完整列表。

CSV 中的数据如下所示:

> Get-Content .\XBTUSD.csv | Select-Object -First 10
1381095255,122.00000,0.10000000
1381179030,123.61000,0.10000000
1381201115,123.91000,1.00000000
1381201115,123.90000,0.99160000
1381210004,124.19000,1.00000000
1381210004,124.18000,1.00000000
1381311039,124.01687,1.00000000
1381311093,124.01687,1.00000000
1381311094,123.84000,0.82300000
1381431835,125.85000,1.00000000
Run Code Online (Sandbox Code Playgroud)

有关该文件的更多信息可在此处找到:

https://support.kraken.com/hc/en-us/articles/360047543791-Downloadable-historical-market-data-time-and-sales

该文件可以从这里下载:

https://drive.google.com/drive/folders/1jI3mZvrPbInNAEaIOoMbWvFfgRDZ44TT

请参阅文件XBT.zip。该档案里面是XBTUSD.csv.

基线测试-直接导入到sqlite中

如果我在 sqlite 中创建下表:

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         10/4/2021   1:23 PM     1397998768 XBTUSD.csv
Run Code Online (Sandbox Code Playgroud)

并运行以下命令导入 CSV(以及所需时间):

$a = Get-Date

sqlite3.exe .\kraken-trades.db -cmd '.mode …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-core

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