为什么没有对未使用的 let 绑定发出警告?

2024-02-24

C# 对作为编译时常量的未使用变量发出警告:

static void Main(string[] args)
{
    var unused = "hey"; //CS0219 The variable 'unused' is assigned but its value is never used
    Console.WriteLine("Hello World!");
}

但 F# 编译器不会,尽管编辑器现在确实会识别它:

如果它不仅涵盖编译时常量,还涵盖所有 let 绑定,那么这将在生产中捕获由微不足道的错误引起的真正错误,例如

let callApiXyz connectionInfo = async {
    let fullUrl = sprintf "%s..." connectionInfo.Url
    ...
    let! result = httpGet connectionInfo // fail, didn't use the modified url
    // Should have been:
    // let! result = httpGet { connectionInfo with Url = fullUrl }
    ...
}

有什么理由不拥有这个(除了“功能不是免费的”)?我觉得这应该是more与 C# 相比,这在函数优先的语言中很重要,因为表达式往往不会产生副作用。


对于我们这些没有 Visual Studio 并手动编辑 fsproj 的人来说,实现 Tomas 答案的方法是

<PropertyGroup>
    <OtherFlags>$(OtherFlags) --warnon:1182</OtherFlags>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>

作为示例,请参见的项目文件FSharp.Core itself. https://github.com/dotnet/fsharp/blob/d7ebc4a114b19f6e476ae621757e91f66fb4d5d3/src/fsharp/FSharp.Core/FSharp.Core.fsproj

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么没有对未使用的 let 绑定发出警告? 的相关文章

  • 按属性值选择 XML 节点

  • 通用高阶函数

    当我将泛型函数作为本地值传递时 但在作为参数传递时却不能使用具有不同类型参数的泛型函数时 是否有原因 例如 let f id let g x y f x f y g 1 2 工作正常 但如果我尝试将函数作为参数传递 let g f x y
  • 如何在 F# 中捕获任何异常(System.Exception)而不发出警告?

    我试图捕获异常 但编译器给出警告 此类型测试或向下转型将始终保持 let testFail try printfn Ready for failing failwith Fails with System ArgumentException
  • F# 获取随机数列表

    我正在尝试用随机数填充列表 但很难获得随机数部分 我现在打印出一个随机数 10 次 我想要的是打印出 10 个不同的随机数 let a new System Random Next 1 1000 let listOfSquares for
  • F# 正确使用序列缓存

    我正在尝试将 Seq cache 与我制作的函数一起使用 该函数返回最多为 N 的素数序列 不包括数字 1 我无法弄清楚如何将缓存的序列保留在范围内 但仍然使用它在我的定义中 let rec primesNot1 n 2 n gt Seq
  • 单位安全平方根

    我只是想知道如何以与 F 正确交互的方式编写用户定义的平方根函数 sqrt 单位制 http blogs msdn com andrewkennedy archive 2008 09 04 units of measure in f par
  • F# 中的数组初始化

    如何根据给定的记录类型在 F 中创建和初始化数组 假设我想创建一个包含 100 个 record1 记录的数组 e g type record1 value1 string value2 string let myArray Array i
  • 何时评估 F# 函数调用;懒惰地还是立即地?

    F 中的柯里化函数 我知道传入参数子集会产生一个带有预设的函数 我只是想知道传递所有参数是否有什么不同 例如 let addTwo x y x y let incr a addTwo 1 let added addTwo 2 2 incr是
  • 如何使用 .Net Core 和 VSCode 在调试模式下执行测试?

    如何使用 Net Core 和 VSCode 在调试模式下执行测试 我当前正在命令行上运行以下命令 dotnet Test 但是 这不是在调试模式下执行测试 我要附加调试器吗 如果是这样 怎么办 如有必要 请将测试项目转换为控制台应用程序
  • 如何解决 FParsec 错误“组合器‘许多’已应用于解析器,该解析器在不消耗...的情况下成功”

    我有一个看起来足够简单的解析器 我将此子解析器添加到末尾以提供有关一般解析错误的信息 因为所有其他子解析器都失败了 Read the rest of a line as an error let readError parse let re
  • F# 中的选项类型如何工作

    因此 我一直在阅读 Apress 的 Expert F 书籍 主要将其用作构建玩具式 F 库时的参考 但有一点我未能掌握 那就是 Option 类型 它是如何工作的以及它在现实世界中的用途是什么 选项类型至少为similar to Null
  • F# 中的动态编程

    实现解决问题的动态规划算法的最优雅的方法是什么子问题重叠的问题 http en wikipedia org wiki Overlapping subproblem 在命令式编程中 人们通常会创建一个按问题大小索引的数组 至少在一维 然后算法
  • true 和布尔列表 f# 的长度

    直接使用递归 写一个函数truesAndLength bool list gt int int那 返回列表的长度 在该对的第一个组件中 以及列表的数量 列表中正确的元素 在第二个组件中 你的函数必须只迭代 遍历列表的元素一次 请勿使用 Li
  • F# 中的自定义路由事件

    我正在尝试翻译这段 C 代码 https msdn microsoft com en us library ms752288 aspx 到目前为止我的尝试 type MyButtonSimple as self inherit Button
  • 您可以使用 .net core 运行 F# 脚本文件 (.fsx) 吗?

    是否可以使用 net core 运行 fsx 文件 相当于fsharpi在单声道上 它在 NETCore v3 0 或更高版本中开箱即用 cat hello fsx usr bin env fsharpi printfn hello wor
  • obj[] 和 string[] 作为参数

    我在用Microsoft FSharp Reflection FSharpValue MakeUnion这需要一个Reflection UnionCaseInfo and an obj 可以为空 作为参数 但是 我得到了Type misma
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • Async.AwaitTask 在 f# 中如何工作?

    我知道 f 和 c 异步模型之间的主要区别在于 在 f 中 除非您调用 Async RunSynchronously 之类的内容 否则异步执行不会开始 在 C 中 当方法返回任务时 通常 并非总是 立即在后台线程中开始执行 Async Aw
  • F#:Microsoft.FSharp.Data.TypeProviders 是否需要配置文件 47?

    这是后续我昨天的帖子 https stackoverflow com questions 30399773 f fsc error fs2024 static linking may not use assembly that target
  • 专家 f# 脚本编译奇怪

    第 209 210 页有一个扩展示例 见下文 我使用的是 F 4 5 总之 我不明白的是 如果我单独键入每个语句 则会有一个声明引发错误 如果我立即提交整个脚本 以及引发错误的声明之后的函数 则一切正常 那么 当我批量提交所有语句时 交互中

随机推荐

  • Google Cloud Logging 的包含/排除过滤器的文档在哪里?

    我正在尝试通过 Pub Sub 主题从 Google Cloud 导出日志 作为该过程的一部分 我必须创建一个称为 包含过滤器 的东西 我可以找到有关此过滤器的唯一文档在这里 https cloud google com logging d
  • Android 版 ffmpeg:neon 构建具有文本重定位

    您好 我成功构建了 appunite ffmpeg 库 包括 arm v7a neon 支持 但是当我尝试在 Marshmallow 设备上运行这些库时 出现此错误 01 08 23 42 02 350 E AndroidRuntime 1
  • 比较两个对象数组

    我有两个这样的数组 第一个数组是customFields长度为 2 var customFields hashKey object 259 fields id 0 84177744416334 inputType number labelS
  • MS 实体框架的最佳起点是什么?

    请给我有关实体框架的最佳指导方向 有一些可用教程的列表这个问题 https stackoverflow com questions 62110 adonet entity framework tutorials 是一个有用的实体框架论坛 对
  • 如何在 FFTW 库中进行实数反演 FFT

    我正在尝试使用 FFT 进行一些过滤 我正在使用 r2r 1d 计划 但我不知道如何进行逆变换 void PerformFiltering double data int n FFT double spectrum new double n
  • 什么是耙子以及它如何在导轨中使用?

    什么是 rake 以及如何在 Ruby on Rails 中使用它 耙子是一个 软件任务管理工具 http en wikipedia org wiki Rake 28software 29 类似于其他系统中的Make等 See http g
  • 使用 JS 或 jQuery 处理表单提交时的 500 错误?

    我正在使用标准表单 操作来发布到宁静的网络服务 由于表单的大小和构成 我尝试不使用ajax 有没有办法将错误处理附加到表单提交中 请参阅下面我当前的代码
  • WCF + Windows Phone 7

    是否可以使用 Windows Phone 7 应用程序的 WCF 服务 任何链接都会非常有帮助 Thanks 以下是将 WP7 应用程序连接到 WCF 服务的快速演练 向右滚动到他的第一个教程 AfricanGeek Silverlight
  • 调用 XSL 模板时的可选参数

    有没有办法使用可选参数调用 XSL 模板 例如
  • 撤消“设置为起始页”

    我将 ASP net 页面之一设置为 Visual Studio 中的默认起始页 当我尝试调试我的项目时 这会导致 404 错误 我该如何清除这个 Thanks Barry 右键单击 MVC 项目并选择属性 转到网络选项卡 在 开始操作 下
  • TFS 中的孤立分支

    我们在 TFS 中有一个主干 每个人都在工作 直到我们需要分支为止 我们的上一个项目是一个需要分支的大型功能 现在开发已经完成 更改已合并回主干 开发分支应该发生什么 我应该删除它吗 以某种方式将其标记为只读 隐形和锁定怎么样 You ca
  • 如何从两个列表中删除与单独列表的重复值相对应的非最大值索引?

    我有两个列表 第一个列表代表观察时间 第二个列表代表这些时间的观察值 我试图在给定不同长度的滚动窗口的情况下找到最大观测值和相应的时间 例如 这是两个列表 observed values linspeed 280 0 275 0 300 0
  • 是否有任何理由从资源中预加载可绘制对象?

    Android 是否维护应用程序可绘制资源的内存缓存并重用它们 或者预加载可能动态分配给不同小部件的所有可绘制资源是一个好习惯吗 例如 public static final int SETS R drawable set0 R drawa
  • 为什么 RelayCommand 中使用弱引用?

    我最近从 MVVMLight 3 升级到 4 并注意到我的命令损坏了 事实证明 在新的 RelayCommand 在版本 3 5 中实现 中使用弱引用导致我正在使用的代码构造失败 我知道存在一些与内存泄漏有关的弱引用的争论 我只是不明白 这
  • 如何将枚举值添加到列表中

    我有以下枚举 public enum SymbolWejsciowy K1 K2 K3 K4 K5 K6 K7 K8 我想使用此枚举的值创建一个列表 public List
  • 如何在Github上显示Markdown文件中的图像?

    我想在 Github 上的 Markdown 文件中显示一些图像 我发现它是这样工作的 Figure 1 1 https raw github com username repo master images figure 1 1 png F
  • 如何使用 underscorejs 进行分组并获取平均值

    如何分组category并使用下划线获得平均值 我有一系列对象 它应该按以下方式分组category和平均值Analytics计算自val属性 即 1 2 gt 3 3 类别总数 所以 3 2 gt 1 5 预期输出 Analytics 1
  • 如何检查 vDSP 函数在 neon 上运行的是标量还是 SIMD

    我目前正在使用 vDSP 框架中的一些函数 尤其是 vDSP conv 我想知道是否有任何方法可以检查该函数是否调用标量模式或在 neon 处理器上处理 SIMD The 文档 https developer apple com libra
  • iOS 5:设置输入类型的最小值和最大值=“日期”

    我想弄清楚如何设置一个的最小值和最大值input type date 我在网上找不到任何东西 也没有自己弄清楚 我需要设置最小值和最大值来验证年龄 我想这可能是这样的
  • 为什么没有对未使用的 let 绑定发出警告?

    C 对作为编译时常量的未使用变量发出警告 static void Main string args var unused hey CS0219 The variable unused is assigned but its value is