小编Fri*_*etz的帖子

F#如何推断其他模块的类型和标签?

这是我用来解释我的问题的最小代码示例.以下代码组织在两个文件中并编译正常:

DataStruct.fs

module MyMod 
type XXX = {
    a: int
}
with
    static member GetNew =
        {
            a = -1
        }

type YYY = {
    a: float
}
with
    static member GetNew =
        {
            a = -1.0
        }


type Choice =
    | XXX of XXX
    | YYY of YYY
Run Code Online (Sandbox Code Playgroud)

Program.fs

open MyMod

let generator = 
    let res = XXX.GetNew
    Choice.XXX res

let myVal : XXX = 
    match generator with
    | XXX x -> x
    | _ -> printfn "expected XXX, …
Run Code Online (Sandbox Code Playgroud)

f# types type-inference f#-4.0

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

F#管道和功能应用之间的神秘差异

前提:我认为管道操作员只不过是语法糖,因此x |> f应该完全相同f(x).

类似地,我认为这f (fun x -> foo)相当于let g = fun x -> foo; f g

但显然我不明白存在差异.

例1:

static member contents = 
    let files = Directory.EnumerateFiles (__SOURCE_DIRECTORY__+ @"\foo\bar.txt")
    let fileList = List.ofSeq files
    fileList |> List.map (fun f -> TestCaseData(f).SetName(""))
Run Code Online (Sandbox Code Playgroud)

这工作得很好:TestCaseData预计的arg:obj其匹配由f该消息又在推断为是string因为fileList是文件名的列表.但是以下不起作用

static member contents = 
    let files = Directory.EnumerateFiles (__SOURCE_DIRECTORY__+ @"\foo\bar.txt")
    let fileList = List.ofSeq files
    List.map (fun f -> TestCaseData(f).SetName("")) fileList
Run Code Online (Sandbox Code Playgroud)

除了最后一行之外什么都没有改变.突然f被推断为 …

f# type-inference piping

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

与计算表达式的相互递归

目前我有以下结构:

let rec foo x = State.state{
    let rec bar =
        //...
        foo 5
        //...
    //...
    bar
    //...
}
Run Code Online (Sandbox Code Playgroud)

我想提取'bar'函数并获得如下结构:

let rec foo x = State.state{
    //...
    bar
    //...
}
and bar =  State.state{
    //...
    foo 5
    //...
}
Run Code Online (Sandbox Code Playgroud)

这将允许我有另一个函数foo2,它也可以使用bar并避免代码重复.

问题是:我的提案没有在F#中编译,显然这是因为State上下文.那么达到所需代码结构的语法正确方法是什么?

f#

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

F#中的NUnit 3测试的测试用例

我正在尝试使用NUnit为F#项目设置测试套件。似乎特别是在测试诸如解析器和类型检查器之类的东西时,通常具有一列有效输入数据和一列无效数据。测试本身实际上是相同的,因此我正在寻找一种聪明的方法来避免为每个数据项编写测试函数,而是将测试函数与数据分开。显然,这似乎有一个所谓的测试用例,但是我很难找到有关将NUnit 3与F#一起使用的全面文档,尤其是针对我的场景最佳实践示例

非常感谢任何指针和提示!

f# testcase nunit-3.0

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

标签 统计

f# ×4

type-inference ×2

f#-4.0 ×1

nunit-3.0 ×1

piping ×1

testcase ×1

types ×1