我有歧视的联盟:
@Html.PagedListPager(Model, page => Url.Action("Index", new { page, itemsPerPage = ViewBag.CurrentItemsPerPage, Model.FirstOrDefault().SelectedStatusId }))
我有一大段代码我想重构:
$table->group($columns[, $having])
我想创建新函数以在内部匹配中使用它。这就是我所拥有的:
type Attribute =
| AttrA of o : AttrA
| AttrB of o : AttrB
// ...
| None
参数 // get Attribute
match someType with
| 0 -> let attrs = foo1 name
match attrs.Length with
| 0 -> None
| _ -> AttrA(o = attrs.[0] )
| 1 -> let attrs = foo2 name
match attrs.Length with
| 0 -> None
| _ -> AttrB(o = attrs.[0] )
// ...
的问题。
这不是一项功能,无法应用。
如何修复我的功能?
答案 0 :(得分:2)
尝试这样的事情:
let foo (f : (string -> 'b[])) (s : string) (make : 'b -> Attribute) =
let attrs = f s
match attrs.Length with
| 0 -> None
| _ -> make(attrs.[0])
make
可以是常规函数,也可以是类型构造函数,即Attribute.AttrA
。