我有此代碼約束通用功能參數
let inline ProcessExpendableADGroups (input : ('a * SPUser) seq) =
input
|> Seq.filter (fun (_, u : SPUser) -> u.IsDomainGroup = true)
|> Seq.filter (fun (_, u : SPUser) -> ADUtility.IsADGroupExpandable u.LoginName = true)
|> List.ofSeq
|> List.iter(
fun (li : 'a, u : SPUser) ->
let userList = ADUtility.GetUsers u.LoginName
if (Seq.length userList <= 500) then
userList
|> Seq.filter (fun l -> InfobarrierPolicy.IsUserInPolicy l "FW" = true)
|> Seq.iter (
fun ln ->
let x = ADUtility.GetNameAndEmail ln
let (email, name) = x.Value
SPUtility.CopyRoleAssignment li u.LoginName ln email name
li.Update()
)
SPUtility.RemoveRoleAssignment li u
)
list3
|> List.iter (
fun w ->
SPUtility.GetDirectAssignmentsforListItems w |> ProcessExpendableADGroups
SPUtility.GetDirectAssignmentsforFolders w |> ProcessExpendableADGroups
SPUtility.GetDirectAssignmentsforLists w |> ProcessExpendableADGroups
SPUtility.GetDirectAssignmentsforWeb w |> ProcessExpendableADGroups
)
此處的方法GetDirectAssignmentsforListItems返回元組序列(SPListItem * SPUser) GetDirectAssignmentsforWeb返回元組序列(的SPWeb * SPUser)。
我需要將這個序列發送到一個函數,它對這些項目做了非常類似的處理,除了最後我必須在這些項目上調用一個名爲「Update」的方法。
我已經寫了一個Generic參數的方法,但我在通用參數上調用Update時遇到問題。
我不能約束這個參數來說參數必須有一個叫做Update的方法。
爲什麼我們要聲明成員Update:unit - > unit兩次?一次在功能標題中,然後再次在調用時? –
我太過分了。我更新了答案,刪除了它,並添加了解釋「a」和「^ a」之間區別的鏈接。 – pad