sách gpt4 ai đã đi

Mẫu F# khớp với các tham số

In lại 作者:行者123 更新时间:2023-12-04 22:19:44 29 4
mua khóa gpt4 Nike

这可能很简单,但有人可以解释为什么以下模式匹配不明智吗?它说其他规则,例如1, 0, _ 永远不会匹配。

let matchTest(n : int) = 
let ran = new Random()
let i = ran.Next(0, 2)
match i with
| n -> printfn "%i" n
| 1 -> printfn "1"
| 0 -> printfn "0"
| _ -> printfn "impossible"

同样的事情:
let matchTest(n : int) = 
let ran = new Random()
let i = ran.Next(0, 2)
let m = n
match i with
| m -> printfn "%i" m
| 1 -> printfn "1"
| 0 -> printfn "0"
| _ -> printfn "impossible"

那为什么不能匹配 Nhoặc tôi直接在这里?

1 Câu trả lời

N在第一个示例中是一个占位符符号,如果匹配成功,则会填充该符号。和写法一样:

let matchTest(n : int) = 
let ran = new Random()
let i = ran.Next(0, 2)
match i with
| x -> printfn "%i" x
| 1 -> printfn "1"
| 0 -> printfn "0"
| _ -> printfn "impossible"

符号 xTôi 的值填充如果匹配成功,则可以在 -> 的右侧使用.这个匹配总是成功的,这就解释了为什么其余的匹配案例是不可达的。

在您的情况下,恰好您将匹配变量命名为 N ,与输入参数同名。

但是,这不是相同的值。相反,会发生一个新值,也称为 N正在创建,之前的 N不再可访问。

这是一个名为 的语言功能。阴影 .

您还可以在模式匹配之外看到它:
let foo n =
let n = 1
N

示例用法:
> foo 42;;
val it : int = 1
> foo 1337;;
val it : int = 1

如您所见,let-bound N遮蔽输入参数 N .

OP 中的第二个示例,在 N 上匹配是第一个的变体,所以同样的解释也适用。

关于与参数匹配的 F# 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34876655/

29 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com