[英]F# Int * Int confusion
首先,我想说,我对这种语言完全不熟悉,而且现在对我来说似乎非常奇怪(作为Java / C#用户)。
我正在做一个uni项目,我必须使用寻路来导航网格(甚至不接近这一点,稍后会处理它) ,我已经创建了一个大小为10x10的二维数组但是我已经发现我可以通过使用像mutable position = 0,0这样的东西来存储我当前的位置,这给了我一种int * int。
这对我来说似乎很棒,因为我可以轻松地存储我的X和Y位置,但是我遇到了一些问题
1)获取变量中的各个值。 IE获取我当前的X位置或获得我当前的Y位置
2)添加到此变量,以便我可以在网格中移动。 IE位置< - 位置+(5,5)
再一次,我对这种语言只有少量的经验,所以请保持温和,尽管我似乎很好地掌握了基础知识。
感谢您提供的任何帮助!
除了Ringil所说的,您可以使用以下方法解构元组:
let xPos, yPos = gridPos
这在F#中更简洁/惯用。
您可以使用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#中的可变状态......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.