F#可变列表为空

时间:2014-07-01 16:13:41

标签: f# specflow

当我尝试运行下面的代码时,属性为null。为什么会这样?我为属性分配一个空列表,但是第一次通过循环时,它是null。

这会导致它删除我追加到它的第一个值。我也不明白这一点。似乎与null连接的值应该是值的列表。

[<TechTalk.SpecFlow.Binding>]
module FSharpLeftistHeapStepDefinition

open TechTalk.SpecFlow

let mutable properties = [0]
let [<Given>] ``I have a list with the following numbers``(values:Table) = 
    let rec insertItems i =
        if i < 0 then ()
        else 
            let value = int ((values.Rows.Item i).Item 0)            
            properties <- value::properties
            insertItems (i-1)

    insertItems (values.RowCount - 1)

这很奇怪。

[编辑] 解决方案基于Tarmil的回答

 [<Binding>]
 type Example ()= 
     let mutable properties = []
     let [<Given>] ``I have a list with the following numbers``(values:Table) = 
         let rec insertItems i =
             if i < 0 then ()
             else 
                 let value = int ((values.Rows.Item i).Item 0)            
                 properties <- value::properties
                 insertItems (i-1)

         insertItems (values.RowCount - 1)

1 个答案:

答案 0 :(得分:3)

我认为这个[<Given>]属性来自一个测试框架,这使我怀疑该程序集是以非传统方式加载的。初始值[0]由模块的静态构造函数设置,因此如果测试框架没有运行此构造函数,那么这将解释为什么它保持等于null