给出键/值对的列表:
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"或其他键是否存在或者是否存在列表是空的.
基本上,将列表分解为一组类型变量.
更新:关于上下文的注释
在我的应用程序中,我从一个不同团队维护的上游程序中收到一个键/值对列表.我希望某些键位于列表中,我想将其分配给类型变量以供以后处理.如果我需要的东西丢失,我会抛出异常.但是我不希望被锁定到任何给定的变量名称集,除了预期的变量名称.对于所有这些,我希望能够在运行时分配它们.
如果您希望稍后在代码中对变量执行某些操作,那么它们将需要在范围内 - 因此您将不可避免地以某种方式声明变量.最简单的选择是使它们变为可变并根据列表中的值进行变异:
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#代码,它确实看起来有点难看,如果你添加更多的上下文可能,有人可以建议一个更好的方法.
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |