f# - 我如何满足编译器消除警告0052的要求?

标签 f# compiler-warnings

我希望满足编译器警告级别5。因此我在一个文件FS0052中有32条警告。已复制该值,以确保此操作不会使原始变量变异

我遵循的唯一SO post似乎与此警告相关,但是由于我的类型是Microsoft生成的类型提供程序,因此我不能只是将字段标记为可变以使警告静音。加上使一些实际上不应该被改变的可变性看起来像是骇客,而不是修复程序。

例子:

  • 可空.GetValueOrDefault()
  • 可空.ToString()
  • 引导.toString()
  • 我相信的任何类型的
  • struct方法调用

    从适当的功能角度来看,处理此警告的推荐方法是什么?

  • 最佳答案

    不知道您是否仍然感兴趣。

    在我看来,当不确定方法调用是否会破坏原始实例的状态时,编译器会发出警告(这主要应来自F#之外的任何库)。

    就我而言,将值显式复制到变量中通常可以减轻警告。例如:

    open System
    
    // generate the warning due to "ToString()"
    let DirSeparator = Path.DirectorySeparatorChar.ToString()  
    
    // no warning
    let ExplicitCopy = let x = Path.DirectorySeparatorChar in x.ToString()  
    
    let Alternative = sprintf "%c" Path.DirectorySeparatorChar
    

    关于f# - 我如何满足编译器消除警告0052的要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773576/

    相关文章:

    f# - 与计算表达式的相互递归

    Java:if语句可以简化(box contains point)

    c++ - 为什么按位否定运算符 "~"转换为 int? (从 ‘unsigned char’ 转换为 ‘int’ 可能会改变它的值)

    c# - 自定义编译器警告

    rust - 如何禁用 "unnecessary path disambiguator"警告?

    html - 你能提出一种更优雅的方法来将 'tokenize' c# 代码用于 html 格式化吗?

    f# - 在 F# 中,我应该何时使用 List.choose 以及何时使用 List.filter

    c++ - 使用#pragma warning push/pop 是临时改变警告级别的正确方法吗?

    泛型:类型应该对另一种类型进行操作,而是对声明的文字值进行操作?

    f# - 如何为 F# 类实现结构化 Equals?