我通过let mutable
在我的第一个模块中定义了一个空的可变字典。在后续模块(知道第一个模块)中,我尝试将一个键值对添加到字典中,但此代码从不运行(但编译成功)。为什么呢?
另一方面,字典似乎可以在 的模块中成功变异。
File1.fs
module File1
let mutable dictionary = System.Collections.Generic.Dictionary<string, int>()
File2.fs
module File2
File1.dictionary.Add("one",1)
Program.fs
[<EntryPoint>]
let main argv =
printfn "%A" File1.dictionary.["one"]
0 // return an integer exit code
收到错误:
mscorlib.dll中出现未处理的“System.Collections.Generic.KeyNotFoundException”类型的异常附加信息:字典中没有给定的键。
答案 0 :(得分:5)
您没有任何调用 import numpy as np
dataMatrix = np.empty([4,1])
def collectData():
receive data from hardware in the form of a 4x1 list
while receivingData:
newData = collectData()
dataMatrix = np.r_(dataMatrix, newData)
中代码的内容。正确的方法是在函数内,所以
File2.fs
File2
Program.fs
module File2
let addOne() = File1.dictionary.Add("one", 1)
也就是说,F#中通常避免全局可变状态;拥有let main _ =
File2.addOne()
printfn....
,然后将其作为参数传递给File1.createDict()
,而不是将其存储为全局变量,这更具惯用性。
旁注你实际上并不需要File2.addOne
标记,因为这意味着字典引用本身是可变的,而不仅仅是它的内容(mutable
的定义总是可变的)。