【问题标题】:no easy way with records in F#?在 F# 中记录没有简单的方法?
【发布时间】:2009-07-27 21:35:19
【问题描述】:

在 F# 中我可以这样做:

type coord = float * float  //Type for a 2D-float-tupple
let myDepthCurve1 = { coords = [(1., 2.); (3., 4.)]; depth = 9.4 }

但我不能这样做:

type coord = { longitude : float; latitude : float } //Type for a 2D-float-record
let myDepthCurve1 = { coords = [(longitude = 1., latitude = 2.); (longitude = 3., latitude = 4.)]; depth = 9.4 }

当坐标类型记录中的字段被标记时,我真的不能一次创建我的depthurve吗?

【问题讨论】:

    标签: f# instantiation record


    【解决方案1】:

    您应该使用{} 进行记录,而不是()。即:

    type coord = { longitude : float; latitude : float } //Type for a 2D-float-record
    let myDepthCurve1 = {
         coords = [ { longitude = 1.; latitude = 2. };
                    { longitude = 3.; latitude = 4. }];
         depth = 9.4 }
    

    【讨论】:

    • 除了应该是 ;而不是 , 在表达式中 {longitude = 1., latitude = 2.}在 F# 中?
    • 已修复。模式很简单 - 逗号是一个产生元组的运算符(注意它不需要括号),所以其他所有内容都必须使用分号来消除歧义。
    【解决方案2】:

    我认为如果您使用花括号而不是括号来构造“内联”记录表达式会很好。

    【讨论】:

      【解决方案3】:

      假设是这样的类型:

      类型 x = { 坐标:坐标列表;深度:浮动};;

      你可以这样写:

      让 myDepthCurve1 = { coords = [{longitude = 1.;纬度 = 2.}; {经度 = 3.;纬度 = 4.}]; 深度 = 9.4 };;

      【讨论】:

      • 谢谢大家。小细节,大不同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多