Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 如何使编译器满意以消除警告0052?_F#_Compiler Warnings - Fatal编程技术网

F# 如何使编译器满意以消除警告0052?

F# 如何使编译器满意以消除警告0052?,f#,compiler-warnings,F#,Compiler Warnings,我希望满足编译器警告级别5的要求。因此,我在一个文件FS0052中有32个警告。该值已被复制,以确保原始值不会因此操作而发生变化 我遵循了唯一一个似乎与此警告相关的选项,但由于我的类型是由Microsoft生成的类型提供程序,因此我不能只标记字段mutable来消除警告。再加上,让一些实际上不应该变异的东西变得易变似乎是一种黑客行为,而不是修复 示例: Nullable.GetValueOrDefault() 可空.ToString() Guid.toString() 我相信任何类型的struc

我希望满足编译器警告级别5的要求。因此,我在一个文件FS0052中有32个警告。该值已被复制,以确保原始值不会因此操作而发生变化

我遵循了唯一一个似乎与此警告相关的选项,但由于我的类型是由Microsoft生成的类型提供程序,因此我不能只标记字段mutable来消除警告。再加上,让一些实际上不应该变异的东西变得易变似乎是一种黑客行为,而不是修复

示例:

  • Nullable
    .GetValueOrDefault()
  • 可空
    .ToString()
  • Guid
    .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
    
    从适当的角度处理此警告的建议方法是什么 功能视角

    我发现了很多关于这个问题的问题,但这个问题我在别的地方找不到。在修正了许多这样的警告之后,这是我的结论

    我认为没有单一的解决办法。(除非你想用编译器指令或其他什么东西使警告静音,我当然不想这样做。我感觉你同意我的看法,因为你已经将警告级别提高到了5级。)

    第一选项

    通常还有另一种编码方式,而不必求助于中间值或其他复杂表达式

    例如,在这种情况下使警告静音

    myStruct.someField <- myRecord.SomeField.ToString()
    

    myStruct.someField tbh:我会用
    #nowarn
    忽略这一点,在这种情况下,我不相信
    #nowarn
    在F中起作用,哦,相信它会起作用;)哦,在F#my badit中实际工作的4个版本中有一个应该注意,
    #nowarn
    到目前为止只在F#中的文件或程序集级别工作。我必须承认,自我写这篇文章以来,FS0052一直让我非常恼火,我不得不在一个项目中在项目级别上对它进行沉默。这是我所知道的唯一一个警告,与其说是帮助,不如说是讨厌。我希望有人能更改编译器,以便更好地分析警告是否正确。
    myStruct.someField <- string myRecord.SomeField
    
    let valueOrDefault (v: 'a Nullable) = if v.HasValue then v.Value else Unchecked.defaultof<'a>