为什么看起来F#的参数顺序很重要?对于C#(使用相同的编译模型)无关紧要.当我尝试这个:
# main.fs
module Main
let main = Printer.print_repeatedly 5 "hello, world"
# printer.fs
module Printer
let print_repeatedly n str = for x in 1..n do printfn "%s" str
Run Code Online (Sandbox Code Playgroud)
我用printer.fs之前的main.fs执行编译器(包括Microsoft和Mono),我收到一个错误:
main.fs(4,12): error FS0039: The namespace or module 'Printer' is not defined
Run Code Online (Sandbox Code Playgroud)
如果我在命令行的main.fs之前执行printer.fs,那很好.编译器是否有理由要求F#?
在F#中,传递给编译器的文件顺序绝对重要:F#编译器严格从左到右,从上到下读取程序.变量和类型只能引用它们之前定义的变量和类型,除非您明确指出相互递归的关系and.
如果你来自C#,这看起来似乎是一个限制.但是你了解到,在实践中,它实际上是一种非常有效的代码组织实施,并防止递归引用疯狂.
请注意,前向引用实际上是编程语言和编译器的一个相当现代的特性(你没有得到它们是"免费的"),如果你曾经使用过早期的C++编译器,你可能还记得需要前向声明才能启用这(让编译器完成工作成本记忆并不总是如此丰富).
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |