如何返回多个值并将它们分配给可变变量?

发布于 2024-07-23 12:47:52 字数 403 浏览 7 评论 0原文

这是我到目前为止所拥有的。

let Swap (left : int , right : int ) = (right, left)

let mutable x = 5
let mutable y = 10

let (newX, newY) = Swap(x, y) //<--this works

//none of these seem to work
//x, y <- Swap(x, y)
//(x, y) <- Swap(x, y)
//(x, y) <- Swap(x, y)
//do (x, y) = Swap(x, y)
//let (x, y) = Swap(x, y)
//do (x, y) <- Swap(x, y)
//let (x, y) <- Swap(x, y)

This is what I have so far.

let Swap (left : int , right : int ) = (right, left)

let mutable x = 5
let mutable y = 10

let (newX, newY) = Swap(x, y) //<--this works

//none of these seem to work
//x, y <- Swap(x, y)
//(x, y) <- Swap(x, y)
//(x, y) <- Swap(x, y)
//do (x, y) = Swap(x, y)
//let (x, y) = Swap(x, y)
//do (x, y) <- Swap(x, y)
//let (x, y) <- Swap(x, y)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

朦胧时间 2024-07-30 12:47:52

你不能; 没有语法可以通过一次赋值来更新“多个可变变量”。 当然你可以做

let newX, newY = Swap(x,y)
x <- newX
y <- newY

You can't; there's no syntax to update 'more than one mutable variable' with a single assignment. Of course you can do

let newX, newY = Swap(x,y)
x <- newX
y <- newY
橘味果▽酱 2024-07-30 12:47:52

F# 与 C# 一样具有“通过引用”参数,因此您可以类似地编写经典的交换函数:

let swap (x: byref<'a>) (y: byref<'a>) =
    let temp = x
    x <- y
    y <- temp

let mutable x,y = 1,2
swap &x &y

F# has "by reference" parameters just like C#, so you can write a classic swap function similarly:

let swap (x: byref<'a>) (y: byref<'a>) =
    let temp = x
    x <- y
    y <- temp

let mutable x,y = 1,2
swap &x &y
笨笨の傻瓜 2024-07-30 12:47:52

您注释的代码不起作用,因为当您编写“x,y”时,您创建了一个新元组,该元组是不可变值,因此无法更新。 如果需要,您可以创建一个可变元组,然后用交换函数的结果覆盖它:

let mutable toto = 5, 10 

let swap (x, y) = y, x

toto  <- swap toto

我的建议是研究 F# 的不可变方面,看看如何使用不可变结构来实现您以前所做的事情使用可变值。

The code you have commented doesn't work because when you write "x, y" you create a new tuple that is an immutable value, so can't be updated. You could create a mutable tuple and then overwrite it with the result of the swap function if you want:

let mutable toto = 5, 10 

let swap (x, y) = y, x

toto  <- swap toto

My advice would be to investigate the immutable side of F#, look at the ways you can use immutable structures to achieve what you previously would have done using mutable values.

Rob

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文