作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通过创建一个简单的数据访问类,我正在使用 F# 接口(interface)。
界面是:
type IUserAccess =
abstract member GetUsers : (dbSchema.ServiceTypes.Users -> bool) -> dbSchema.ServiceTypes.Users seq
abstract member GetAllUsers : unit -> dbSchema.ServiceTypes.Users seq
type UserAccess() =
let db = dbSchema.GetDataContext()
interface IUserAccess with
member this.GetUsers cond =
let query = query {
for row in db.Users do
select row }
query |> Seq.where cond
member this.GetAllUsers () =
(this:>IUserAccess).GetUsers (fun _ -> true)
GetAllUsers
函数,特别是部分
(this:>IUserAccess)
.调用在同一接口(interface)中实现的方法的最简单方法是什么?
GetUsers
直接在
UserAccess()
内的方法类,然后从两个
GetUsers
的接口(interface)实现中调用它和
GetAllUsers
,但这意味着实现了一个新的私有(private)方法,我想避免这种方法。还有其他选择吗?
最佳答案
如果您想避免直接在类中定义单独的方法,我认为@vcsjones 的解决方案可能是最好的选择。也就是说,声明一个单独的方法实际上并没有那么难看。您可以使用 let
使用本地定义绑定(bind)(它被自动编译为私有(private)方法),我认为它使代码看起来相当不错:
type UserAccess() =
let db = dbSchema.GetDataContext()
let getUsers cond =
let query = query {
for row in db.Users do
select row }
query |> Seq.where cond
interface IUserAccess with
member this.GetUsers cond = getUsers cond
member this.GetAllUsers () = getUsers (fun _ -> true)
关于interface - 有没有更简单的方法在 F# 中隐式使用接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23325502/
我是一名优秀的程序员,十分优秀!