F#变量赋值的键值对列表

use*_*098 2 variables f# list

给出键/值对的列表:

do 
    [("A", 1);("B",2)]
    |> (fun list -> 
            for item in list do
                match item with
                | ("A", x) -> //expression assigning x to variable "A"
                | ("B", x) -> //expression assigning x to variable "B"
                | _ ->  //default expression
       )
Run Code Online (Sandbox Code Playgroud)

是否有一些我能写的表达式可以完成同样的事情

let A = 1
let B = 2
Run Code Online (Sandbox Code Playgroud)

我事先知道列表中的项目不超过10项,并且项目是<string,int>的元组,但事先并不知道"A"或"B"或其他键是否存在或者是否存在列表是空的.

基本上,将列表分解为一组类型变量.

更新:关于上下文的注释

在我的应用程序中,我从一个不同团队维护的上游程序中收到一个键/值对列表.我希望某些键位于列表中,我想将其分配给类型变量以供以后处理.如果我需要的东西丢失,我会抛出异常.但是我不希望被锁定到任何给定的变量名称集,除了预期的变量名称.对于所有这些,我希望能够在运行时分配它们.

Tom*_*cek 6

如果您希望稍后在代码中对变量执行某些操作,那么它们将需要在范围内 - 因此您将不可避免地以某种方式声明变量.最简单的选择是使它们变为可变并根据列表中的值进行变异:

let mutable A = 0
let mutable B = 0
Run Code Online (Sandbox Code Playgroud)

为了使变异更容易,您可以使用setter创建查找表:

let setters = 
  dict [ ("A", fun x -> A <- x); ("B", fun x -> B <- x) ]
Run Code Online (Sandbox Code Playgroud)

现在,您可以迭代输入,使用字典查找来获取适当的setter并调用它来设置变量值:

for var, value in [("A", 1);("B",2)] do
  setters.[var] value
Run Code Online (Sandbox Code Playgroud)

由于你的问题的背景有限,有点难以说这是否是一个很好的方法来实现你的问题实际上是什么 - 作为F#代码,它确实看起来有点难看,如果你添加更多的上下文可能,有人可以建议一个更好的方法.