代码之家  ›  专栏  ›  技术社区  ›  Begtostudy

函数不应该是参数吗?

  •  0
  • Begtostudy  · 技术社区  · 15 年前
    let sub (a:float[]) (b:float[])=  
        [| for i = 0 to Array.length a - 1 do yield a.[i]-b.[i] |]
    
    let fx t = [0..t]
    let x=sub (fx t) (fx t)
    

    以上编译正常。

    但当我用方法调用替换函数调用时,同样会导致错误:

    type type_f = delegate of float -> float[]
    let mutable f =new type_f(fun t->[|0..t|])
    let m=f.Invoke(5) //float[]
    let y=sub m f.Invoke(5)//error
    

    如何将方法调用的结果作为参数传递给函数?

    1 回复  |  直到 15 年前
        1
  •  4
  •   Brian    15 年前

    在F,线

    let y = sub m f.Invoke(5)
    

    含糊不清地分析为

    let y = sub   m   f.Invoke   (5)
    

    (将三个参数传递给 sub )

    要解决这个问题,您需要更多的括号:

    let y = sub m (f.Invoke(5))
    

    (注意使用 delegate 除非与其他语言中的.NET代码进行互操作,否则类型不是惯用的。如果 f 是个函数,然后

    let y = sub m (f 5)
    

    如你所说,就足够了。)