Jos*_*h G 5 syntax f# tuples let semantics
我正在学习F#.我首先查看了Microsoft 的F#示例.
我跑过这个声明:
let line1,line2 =
use sr = System.IO.File.OpenText @"test.txt"
let line1 = sr.ReadLine()
let line2 = sr.ReadLine()
(line1,line2)
Run Code Online (Sandbox Code Playgroud)
谁能向我解释这个陈述?
这里定义的是什么类型?一个功能?一个元组?
为什么line1
和line2
必须的定义范围内重新定义line1,line2
(let line1 =
... let line2 =
)?
什么是最后一行,(line1, line2)
这与原始定义的类型有什么关系?这是函数返回吗?
"声明"甚至是用于F#中定义的正确单词吗?
谢谢.
Bri*_*ian 14
F#中绑定标识符值的一般形式是
let pattern = expression
Run Code Online (Sandbox Code Playgroud)
在这种情况下,模式是"line1,line2",它是一个元组模式,它期望绑定到2元组的值,并将名称"line1"和"line2"分配给这两个值.
的表达是在接下来的4行.在该表达式中有局部变量.它们碰巧也被命名为"line1"和"line2",但它们很容易被重命名为"x"和"y"或其他 - 这些标识符的范围是这个缩进表达式的本地.(就编译器而言,相同名称用作外部作用域中的名称这一事实无效.)
如果表达式是表达式的"返回值",则为最后一行.在这种情况下,它返回值为"line1"和"line2"的2元组(或"x"和"y",如果为了清晰的说明而重命名它们).顺便说一下,由于这两个值都有类型"string",因此返回表达式的类型是"string*string",它是一个2元组,其中每个值都是一个字符串.这意味着第一行上的原始"line1"和"line2"名称将被推断为具有类型"string".
F#是功能性的,因此从某种意义上说"一切都是表达"和"没有语句"(只有顺序评估的表达式序列),但IMO(ab)使用术语"语句"来描述是可以的内在的"让"线,除非你想要非常精确.
归档时间: |
|
查看次数: |
750 次 |
最近记录: |