我该怎么做才能改进这个F#代码?

时间:2014-04-17 23:15:55

标签: .net f#

我正在学习F#,所以我提出了一小段代码来帮助我掌握语言。我创建了下面的代码,从C#调用,然后保存上传的文件。我该如何改进这段代码?欢迎所有观点。

open System.Web
open System.IO

type SaveUpload(file: HttpPostedFileBase, path : string) = 

    // get the file name
    let origFileName = file.FileName

    // create the path including filename
    let filePath = Path.Combine(path, origFileName)

    // directory check
    let directory = Directory.Exists(path)

    // create directory
    let createDir x = 
        match x with
        |false -> Directory.CreateDirectory(path) |> ignore
        |true -> ()

    // save file
    let saveFile = 
        createDir directory
        if directory 
        then file.SaveAs(filePath)

1 个答案:

答案 0 :(得分:6)

以下是一些简单的想法:

  • 正如您所写,代码定义了一个类型SaveUpload,但您实际上是在实现一些有用的代码 - 所以我不明白为什么这会是一个类型。您可以将其编写为静态成员或函数(两者都将作为C#的静态方法)

  • 我不确定使用match的布尔模式匹配是否真的有用。使用if可能会更短(但在更高级的情况下,模式匹配很棒)

  • 最后,您正在定义变量saveFile,但这只是unit类型的值 - 所有代码都已执行,当有人调用时保存文件构造函数。如果您打算将此方法作为方法,则需要将单位值()作为参数。

  • 同样,directory是一个只计算一次的值 - 因此,如果目录不存在,您的代码会创建它,但不会保存文件,因为{{1} }值仍为directory

所以,如果我想把它写成一个模块中的函数,我会选择这样的东西:

false