ako*_*ham 3 standards scope global ml sml
有没有办法在let-in-end表达式中更新全局范围内绑定的变量?
例如,如果我有一个全局变量:
val playerScore = 0;
Run Code Online (Sandbox Code Playgroud)
然后功能:
fun hit (option:int) =
if option = 2 then
printStay(playerScore, dealerScore)
else
let
val cardDrawn = showCard(hd deck)
val playerScore = playerScore + getValue(hd deck)
in
print ("You chose to hit\n" ^ cardDrawn ^ "Dealer Score: " ^ Int.toString(dealerScore) ^ "\nPlayer Score: " ^ Int.toString(playerScore) ^ "\n")
end;
Run Code Online (Sandbox Code Playgroud)
playerScore的值在let表达式中更新,并在"in"子句中输出正确的值,但不保存playerScore的实际值,并在此表达式完成后重置.
无论如何,在执行此表达式后,是否仍保留playerScore在全局级别的值?问题是我无法跟踪分数,因为它每次都会重置为0.
谢谢
永远不能在ML中分配"变量".playerScore一旦初始化,它的价值永远不会改变.期.
在您的示例中,您声明了一个在内部作用域中调用的新变量playerScore,该变量隐藏了外部变量.它是一个不同的变量,与同名的外部变量无关.
如果你想使用可变性,你可以使用一个可变数据结构,其中最简单的是一个"ref"单元,它是一个单项可变单元.您可以使用该ref函数创建ref数据结构,!操作员可以访问其内容,:=操作员可以更改其内容.但突变只发生在可变数据结构上,如ref数组等.变量不能改变.
| 归档时间: |
|
| 查看次数: |
2209 次 |
| 最近记录: |