Types F#从列表创建类型

Types F#从列表创建类型,types,f#,type-conversion,Types,F#,Type Conversion,我正在从控制台输入读取数据,并希望将读取的字符串转换为自定义类型。我正在拆分我读取的字符串,然后试图实例化我的自定义类型,但遇到了一个我不理解的编译错误 我将阅读的输入示例(在一行中): let input () = Console.In.ReadLine() type Coordinate = {Longitude:float; Latitude:float} type Defibrillator = {Name:string; Coordinate:Coordinate} // I onl

我正在从控制台输入读取数据,并希望将读取的字符串转换为自定义类型。我正在拆分我读取的字符串,然后试图实例化我的自定义类型,但遇到了一个我不理解的编译错误

我将阅读的输入示例(在一行中):

let input () = Console.In.ReadLine()

type Coordinate = {Longitude:float; Latitude:float}
type Defibrillator = {Name:string; Coordinate:Coordinate} // I only need name and coordinate

let readDefribillator = 
   input().Split(';') 
   |> {Name=""; Coordinate={Longitude=1.0; Latitude=2.0}} // Don't know how to do this
一,;梅森·德拉桑特;马圭隆街6号340000蒙彼利埃;;3,87952263361082;436071285339217

代码示例:

let input () = Console.In.ReadLine()

type Coordinate = {Longitude:float; Latitude:float}
type Defibrillator = {Name:string; Coordinate:Coordinate} // I only need name and coordinate

let readDefribillator = 
   input().Split(';') 
   |> {Name=""; Coordinate={Longitude=1.0; Latitude=2.0}} // Don't know how to do this
错误(在|>{Name=…)行上)

此表达式的类型应为'string[]->'a',但此处的类型为'debrillator'


感谢您的帮助

如果您将输入的数字中的逗号改为点,您可以这样做

let readDefribillator =
    let values = input().Split(';')
    { Name = values.[1]; Coordinate = { Longitude = float values.[4]; Latitude = float values.[5] } }
如果数字包含逗号,则可以使用本地或特定区域性进行转换,函数为Single.Parse、Double.Parse、convert.ToSingle或convert.ToDouble。这些函数的版本具有额外参数。如果不使用额外参数,则可能会使用本地区域性,以便您只需执行以下操作。C您的语言环境可能需要OMMA而不是dots,但对于美国语言环境,如果您输入逗号,这将失败。换句话说,此处使用的函数对语言环境敏感

let readDefribillator =
    let values = input().Split(';')
    let x = Convert.ToDouble values.[4]
    let y = Convert.ToDouble values.[5]
    { Name = values.[1]; Coordinate = { Longitude = x; Latitude = y } }
如果您希望您的输入总是使用逗号或点,那么请使用这些函数的额外参数来指定特定的区域性。有预定义的区域性。我在这里不一一介绍

看起来你已经开始学习F#。StackOverflow不是一个问这样问题的好地方。我建议你加入我们,在这里,几乎任何类型的问题都是受欢迎的。

我建议

open System

type Coordinate = {Longitude:float; Latitude:float}
type Defibrillator = {Name:string; Coordinate:Coordinate} 

[<EntryPoint>]
let main argv = 
    let input  = Console.ReadLine()
    let readDefribillator = 
       input.Split(';') 
       |> fun x -> {Name=""; Coordinate = {
       Longitude = float (x.[4].Replace(",",".")) 
       Latitude =float (x.[5].Replace(",","."))
       }}
    printfn "%A" readDefribillator
    Console.ReadLine |> ignore
    0
开放系统
类型坐标={经度:浮点;纬度:浮点}
类型除颤器={名称:字符串;坐标:坐标}
[]
让主argv=
让输入=Console.ReadLine()
让ReadDefribilator=
input.Split(“;”)
|>fun x->{Name=”“;坐标={
经度=浮动(x[4]。替换(“,”,“))
纬度=浮动(x[5]。替换(“,”,“))
}}
printfn“%A”读取器
Console.ReadLine |>忽略
0
在哪里

  • funx->
    正在处理输入字符串数组
  • x[4]
    x[5]
    正在选择坐标
  • .Replace(“,”,“)
    按照
    float

  • 谢谢,我喜欢你的解释,代码是用|>以函数的方式编写的。我还有很长的路要走。谢谢你的回答,我确实开始学习F#。我正在努力学习语法,但还不知道框架中有什么可用的。很难找到,但我已经找到了。我不认为我能找到在这个松弛频道上提供帮助。我一定会看一看并寻求帮助。再次感谢你的提示。万一你还没有发现它,有一个非常棒的网站,相当于一本书:我有一个非常棒的网站。很多信息,我需要读几次来消化那里写的所有内容。