Installing and using F#
https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/installing-and-using/
F# 编译器是一个免费的开源工具,可用于 Windows、Mac 和 Linux(通过 Mono)(译者:现在理论上应该也可以通过新的.Net 7或者更高版本的sdk直接用了,我没在Linux上试过,但是我之前用C#时可以的,那理论上F#也可以)。在 F# Foundation 了解有关 F# 以及如何安装它的更多信息。
您可以将它与 IDE(Visual Studio、MonoDevelop)或您最喜欢的编辑器(VS Code 和 Atom 使用 Ionide 对 F# 的支持特别好)一起使用,或者只是作为一个独立的命令行编译器。
如果不想安装任何东西,可以试试 .NET Fiddle 站点,这是一个交互式环境,您可以在 Web 浏览器中探索 F#。您应该能够在那里运行该站点上的大部分代码。
Working with the code examples
安装并运行 F# 后,你就可以运行这本书里的代码示例了。
运行此代码示例的最佳方法是将代码放进 .fsx 脚本文件,然后您可以将其发送到 F# 交互式窗口来运行。或者,您可以将示例直接键入 F# 交互式控制台窗口。除了只需要输入一两行的情况之外,我会推荐使用脚本文件的方法。
对于较长的示例,可以从该网站下载代码——链接将在帖子中。
最后,我鼓励您尝试并修改示例。如果随后遇到编译器错误,请查看 “F# 疑难解答” 页面,其中解释了最常见的问题以及如何解决这些问题。
Projects and Solutions
F# 使用与 C# 完全相同的“项目”和“解决方案”模型,因此如果您熟悉它,您应该能够非常轻松地创建 F# 可执行文件。
要制作一个将作为项目的一部分编译的文件,而不是脚本文件,请使用 .fs 扩展名。.fsx 文件将不会被编译。
F# 项目确实与 C# 有一些主要区别:
F# 文件是线性组织的,而不是文件夹和子文件夹的层次结构。事实上,F# 项目中没有“添加新文件夹”选项!这通常不是问题,因为与 C# 不同,F# 文件包含多个类。在 C# 中可能是类的整个文件夹可能很容易在 F# 中是单个文件。
项目中文件的顺序非常重要:“靠后”的 F# 文件可以使用“靠前”的 F# 文件中定义的公开public的类型,但反之则不行。因此,文件之间不能有任何循环依赖关系。
您可以通过右键单击并执行“上移”或“下移”来更改文件的顺序。同样,在创建新文件时,您可以选择“在上方添加”或“在下方添加”现有文件。
Shell scripts in F#
您还可以将 F# 用作脚本语言,而不必将代码编译成 EXE。这是通过使用 FSI 功能完成的,它不仅是一个控制台,还可以像使用 Python 或 Powershell 一样用于运行脚本。
当您想快速创建一些代码而不将其编译成完整的应用程序时,这非常方便。 F# 构建自动化系统“FAKE”就是一个非常有用的例子。
为了让你自己能够做到这件事情,这里有一个小的脚本例子,它可以下载一个网页到本地文件。首先创建一个FSX脚本文件--称之为 "ShellScriptExample.fsx"--然后粘贴以下代码。
// ================================
// Description:
// downloads the given url and stores it as a file with a timestamp
//
// Example command line:
// fsi ShellScriptExample.fsx http://google.com google
// ================================
// "open" brings a .NET namespace into visibility
open System.Net
open System
// download the contents of a web page
let downloadUriToFile url targetfile =
let req = WebRequest.Create(Uri(url))
use resp = req.GetResponse()
use stream = resp.GetResponseStream()
use reader = new IO.StreamReader(stream)
let timestamp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH-mm")
let path = sprintf "%s.%s.html" targetfile timestamp
use writer = new IO.StreamWriter(path)
writer.Write(reader.ReadToEnd())
printfn "finished downloading %s to %s" url path
// Running from FSI, the script name is first, and other args after
match fsi.CommandLineArgs with
| [| scriptName; url; targetfile |] ->
printfn "running script: %s" scriptName
downloadUriToFile url targetfile
| _ ->
printfn "USAGE: [url] [targetfile]"现在不用担心代码是如何工作的。无论如何,它都非常粗糙,一个更好的例子是添加错误处理,等等。
要运行此脚本,请在同一目录中打开命令窗口并键入:
dotnet fsi ShellScriptExample.fsx http://google.com google_homepage当您使用此站点上的代码时,您可能想尝试同时创建一些脚本。
Last updated