小编MiP*_*MiP的帖子

如何在匹配表达式中使用`&`?

符号和运算符参考中,符号&用于:

链接:匹配表达式

  • 计算可变值的地址,以便在与其他语言进行互操作时使用.

  • 用于AND模式.

我查看了Match Expressions页面,但我没有看到任何AND模式.我该如何使用这些&模式?

.net f# expression functional-programming pattern-matching

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

为什么文字默认不是常量?

如果F#鼓励编写不可变的热切评估数据,那么F#为什么不强制执行简单的let绑定const

我需要显式写[<Literal>]属性.例如:

module ConstVsStaticReadOnly =

    [<Literal>]
    let ConstInt32 = 1

    [<Literal>]
    let ConstString = "A" + "B" + "C"

    let staticReadOnlyBoolean = true
Run Code Online (Sandbox Code Playgroud)

.net f# functional-programming constants lazy-evaluation

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

什么时候F#未使用的保留关键字从规范中删除?

我之前从F#Github的一篇文章中读到了一些未使用的保留关键字,例如params,我们应该使用属性.

在" 关键字参考"页面中,我找不到那些已删除的关键字,我可以在哪里搜索它们?

.net f# keyword

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

F#编译器是单通道编译器吗?

我浏览网页,只在个人博客中使用一次通过汇编,而不是在官方文档中找到关于F#的 1个提及.

根据我迄今为止的经验,似乎F#使用一次传递编译,因此您只能引用先前在您当前所在文件中定义的类型或函数,或者出现在编译顺序中先前指定的文件中.

这个陈述是真的吗?

.net compiler-construction f# interpreter ocaml

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

递归区分联合案例类型

如何在其案例是其他案例的子集的情况下创建OCaml/F#DU类型?

例如,我想创建一个包含不同符号声明类型的符号表,例如程序类型,变量和函数.

乍一看,我可以看到变量包含其类型,函数还包含一个类型和许多参数变量.所以我想使用1 DU,而不是分成许多记录或别名:

type Symbol =
    | TypeSymbol of id:string
    | VariableSymbol of id:string * type':TypeSymbol
    | FunctionSymbol of id:string * params':VariableSymbol list * type':TypeSymbol
Run Code Online (Sandbox Code Playgroud)

但这是错误的,因为DU情况不能是其他情况的子集.如何重新格式化类型以声明DU情况是否相互递归?

f# ocaml record abstract-syntax-tree discriminated-union

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

为什么F#不能打开静态类?

我认为模块被编译为静态类.NET IL代码.我可以open命名空间和模块,但为什么不是静态类?

printfn "Hello, World!"

open System.Console
WriteLn("Hello, World!")
Run Code Online (Sandbox Code Playgroud)

.net f#

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

如何在Visual Studio的CMake支持下运行INSTALL?

借助Visual Studio中的CMake支持,如何运行INSTALL构建?

在此处输入图片说明 从顶部工具栏的CMake菜单中,我看不到要运行INSTALL项目的任何选择。

编辑:vre建议的最低设置有效,INSTALL选项显示在工具栏菜单中:

  • CMakeLists.txt

    # 3.9.2 is the current version the newest VS is using
    cmake_minimum_required(VERSION 3.9.2)
    project(test2017)
    add_executable(hello hello.cpp)
    install(TARGETS hello DESTINATION hello/bin)
    
    Run Code Online (Sandbox Code Playgroud)
  • 你好

但是当我移到hello.cpp子文件夹时,该选项消失了:

cmake visual-studio visual-studio-2017

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

F#指南是否建议声明具有相同名称的模块和类型?

在阅读F#组件设计指南后,我没有看到任何评论是否应该声明模块及其类型具有相同的名称.

通常我的项目没有任何循环依赖,所以我不需要创建一个新模块(例如InfrastructureTypesDomainTypes)将每个类型放在一个地方.

例如,如果我有一个记录类型System和一堆函数,我应该把所有内容放在一个模块文件中吗?这是我的尝试:

// System.fs
module System

type rec System =
    { name : string
      children : System list }

let init () = { name = ""; children = [] }

let addChild system child =
    { system with system.children = child :: system.children }

let removeChild system child =
    let rec removeChild children acc child =
        match children with
        | c :: children ->
            if c <> child then removeChild …
Run Code Online (Sandbox Code Playgroud)

.net f# module record naming-conventions

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

在F#中创建本地函数

例如,我有2个附加功能:

module Add

let add2 a =
    let innerFn a = a + 2
    innerFn a
let add2' a =
    let innerFn' () = a + 2
    innerFn' ()

let res1 = add2 0
let res2 = add2' 1
Run Code Online (Sandbox Code Playgroud)

根据我所知,两个innerFns将分别编译为FSharpFunc<int,int>FSharpFunc<unit,int>,并且每次调用add2或被add2'调用时都会被初始化.

如何重写代码以将它们转换为静态类的静态本地函数(因此没有FSharpFunc初始化),就像在C#7中一样?

.net c# f# functional-programming

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

为什么`System.Void`与`unit`类型不同?

F#Types Docs说:

单位类型:描述unit类型,具有一个值并由()表示的类型; 相当于void在C#和NothingVisual Basic中.

它说它们是平等的,但为什么以下比较会返回错误?

typedefof<System.Void> = typedefof<unit>;;
val it : bool = false
Run Code Online (Sandbox Code Playgroud)

.net f# functional-programming

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