在下一页上:https://fsharpforfunandprofit.com/posts/defining-functions/
有以下示例:
$(function(){
$.ajax({
type: "POST",
url: "/Group/FillMembers",
success: function (response) {
$.each(response.message, function (key, value) {
var arr = value.split(";")
var tbody = $("#tbody");
var tr = $("<tr></tr>")
$.each(arr, function (i, obj) {
var temp = arr[i].trim().split("=")[1];
var td = $("<td></td>")
td.append(temp);
tr.append(td);
})
tbody.append(tr);
});
}
});
})
我对以下内容不理解:
type Name = {first:string; last:string} // define a new type
let bob = {first="bob"; last="smith"} // define a value
// single parameter style
let f1 name = // pass in single parameter
let {first=f; last=l} = name // extract in body of function
printfn "first=%s; last=%s" f l
我能理解:
let {first=f; last=l} = name
它将 first 字段分配给 f 并将 last 字段分配给 l 的地方,但是我不知道不了解订单 first = f
这是如何工作的?
答案 0 :(得分:4)
想法是语法始终为{ fieldName = something }
。创建记录时,something
是您要分配给该字段的值。模式匹配时,something
是将字段值绑定到的变量。
答案 1 :(得分:4)
从您的问题来看,我认为您理解/同意声明记录 value 的方式:
let bob = {first="bob"; last="smith"} // define a value
好,走吧!
let绑定的左侧部分(xxx
中的let xxx = yyy
)实际上是 pattern ,而不是语句或赋值。您可以粗略地想到一个类似于正则表达式的模式,您可以在该模式中定义一些占位符。
按常识,值的模式应与值的声明(示例中的yyy
)具有相同的形式。让我们写这个,你会明白为什么语法有意义:
let {first=f; last=l} = {first="bob"; last="smith"}
此处f
和l
是占位符,在此绑定之后,f
的值将为"bob"
,l
的值将为{{1 }}。
我能理解:
"smith"
会将第一个字段分配给f,最后一个字段分配给l的地方。
模式可以嵌套,因此当您继续在{f=first; l=last}
和/或f
上进行模式匹配时,您的解释将被打乱。例如:
l
简而言之,您应该在此处将“值”填入占位符,而不是传统语言中的赋值操作({(Something ff)=first; (Something ll)=last}
)。