期望int返回值

时间:2015-02-17 15:39:30

标签: xml f#

我有以下代码片段,用于评估XML文件:

open System
open System.IO
open System.Xml.Linq
open FSharp.Data
open System.Net

type InputXml = XmlProvider<"C:\Temp\sample.xml">

[<EntryPoint>]
let main argv =

    let input = InputXml.Load("C:\Temp\sample.xml")

    for customer in input.GetCustomers() do
    for order in customer.GetOrders() do
    for line in order.GetOrderLines() do
        printfn "Customer: %s, Order: %s, Item: %s, Quantity: %d"
                customer.Name order.Number line.Item line.Quantity

    Console.ReadLine() |> ignore
    0 // return an integer exit code

编译器显示以下错误:

Error   1   This expression was expected to have type
    int    
but here has type
    unit    D:\f#\samples\Program.fs    16  5   samples

为什么呢?我做错了什么?

1 个答案:

答案 0 :(得分:2)

F#是用空格分隔的。这意味着:

for customer in input.GetCustomers() do
for order in customer.GetOrders() do
for line in order.GetOrderLines() do

需要更像这样:

for customer in input.GetCustomers() do
  for order in customer.GetOrders() do
    for line in order.GetOrderLines() do

否则第一个for正文的范围将持续到当前缩进级别(包括0)结束。您可以使用旧式语法通过执行以下操作来解决此问题:

for customer in input.GetCustomers() do
for order in customer.GetOrders() do
for line in order.GetOrderLines() do

...

done
done
done
0

但此时此高度非惯用。