首先,我想说,我对这种语言完全不熟悉,而且现在对我来说似乎非常奇怪(作为Java / C#用户)。
我目前正在做一个uni项目,我必须使用pathfinding 导航网格(甚至不接近这一点,稍后会处理它),我创建了一个大小为10x10的二维数组但是我发现我可以通过使用像 let mutable position = 0,0 这样的东西来存储我当前的位置,这给了我一种int * int。
这对我来说很好,因为我可以轻松存储我的X和Y位置,但是我遇到了一些问题
1)获取变量中的各个值。 I.E获得我当前的X位置或获得我当前的Y位置
2)添加到此变量,以便我可以在网格中移动。 I.E位置< - 位置+(5,5)
同样,我对这种语言只有少量的经验,所以请保持温和,尽管我似乎很好地掌握了基础知识。
感谢您提供的任何帮助!
答案 0 :(得分:9)
除了Ringil所说的,您可以使用以下方法解构元组:
let xPos, yPos = gridPos
这在F#中更简洁/惯用。
答案 1 :(得分:4)
您可以使用fst
或snd
函数来获取变量中的各个值(请注意,这只适用于大小为2的元组):
let gridPos = 1, 2
//val gridPos : int * int = (1, 2)
let xPos = fst gridPos
//val xPos : int = 1
let yPos = snd gridPos
//val yPos : int = 2
对于第二个问题,您可以覆盖加法运算符以允许int*int
加法元组,如下所示:
let (+) a b = (fst a + fst b, snd a + snd b)
//val ( + ) : int * int -> int * int -> int * int
let newValue = gridPos + (2,5)
//val newValue : int * int = (3, 7)
那说你通常应该避免F#中的可变状态......