F# 转换 int

Ove*_*ive 2 f# casting type-safety

这是一件非常微不足道的事情,但我真的很难让它发挥作用。我想转换sqrt nwhere nis 类型的结果,int64最后将它传递给一个接受 an 的函数,int但我真的很难找到一个像样的解决方案,这是我想出的方法,但这是可怕的,我可以'不相信在例如 C# 中如此微不足道的事情在 F# 中应该如此困难。

n 
|> float 
|> sqrt 
|> int 
|> function
Run Code Online (Sandbox Code Playgroud)

pli*_*nth 6

这是 F# - 如果您没有想要的东西,请编写一个函数。例如:

let inline sqrttoint n =
    (int (sqrt (float n)))

n |> sqrttoint |> function
Run Code Online (Sandbox Code Playgroud)

最重要的是,它适用于任何可以转换为float.

C# 与 F# 的主要问题是您习惯了 C#,其中数字类型是自动提升的,而 F# 希望您关心大多数事物的类型,并且类型的更改需要更加明确。

  • 是的,有时会令人沮丧,但是当您开始将函数用作第一类对象并使用部分函数应用程序时,您会发现类型强度对于代码正确性来说是一个巨大的胜利。等效的 C# 代码 (int)Math.Sqrt(someInt64) 几乎可以完成我在上面所做的工作,并且输入的工作量几乎相同。不同的语言,不同的习惯用法。 (2认同)