我对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 …
我想绑定到一个C函数,abc其签名是:
int abc(void (*)(int))
Run Code Online (Sandbox Code Playgroud)
即它接受指向函数的指针.此回调接受int并具有void返回类型.
Racket中的正确咒语是什么?
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) 例:
~ $ re.pl
$ { my $abc = 10 ; $abc }
10
$ $abc
10
$
Run Code Online (Sandbox Code Playgroud)
这是记录在案的问题吗?
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) 正如在这个问题中提到的,期望a的方法Func不接受F#函数值.
重载一个方法以便接受F#函数值的好方法是什么?
我想要一个多子,其中一个用于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设置为在运行时调度吗?
当尝试在 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或者,我应该更改所指的标题吗?
我安装了以下适用于 Haskell 的 Visual Studio Code 扩展:
elem如果我以前缀形式使用:
(elem n primes)
Run Code Online (Sandbox Code Playgroud)
我得到一个蓝色的波浪线,表明中缀形式:
hlint(refact:Use infix)有没有办法只针对这个文件或项目关闭这个特定的hlint规则?
我有一个大小约为 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://drive.google.com/drive/folders/1jI3mZvrPbInNAEaIOoMbWvFfgRDZ44TT
请参阅文件XBT.zip。该档案里面是XBTUSD.csv.
如果我在 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)