Function 带dependecies的自类型注释:如何访问内部方法
现在,我想将我的数据库连接拆分为“设备”,这些设备都有自己准备好的语句等。不过,它们都应该引用这个Function 带dependecies的自类型注释:如何访问内部方法,function,scala,inner-classes,self-type,Function,Scala,Inner Classes,Self Type,现在,我想将我的数据库连接拆分为“设备”,这些设备都有自己准备好的语句等。不过,它们都应该引用这个Connection实例。我希望能够从外部调用内部函数 不必重命名这些函数,最好的方法是什么 顺便说一句,我的手是真正禁用的atm。你的意思是你希望能够进行数据库连接。登录(…)?如果是这种情况,您首先需要一个LoginDevice实例。根据您的示例,LoginDevice中没有状态,因此它可以是一个对象。然后在DatabaseConnection中声明函数,如val login=LoginDevi
Connection
实例。我希望能够从外部调用内部函数
不必重命名这些函数,最好的方法是什么
顺便说一句,我的手是真正禁用的atm。你的意思是你希望能够进行数据库连接。登录(…)?如果是这种情况,您首先需要一个LoginDevice实例。根据您的示例,LoginDevice中没有状态,因此它可以是一个对象。然后在DatabaseConnection中声明函数,如
val login=LoginDevice.login\uu
。这与我想要的结果非常接近。然而,如果我有10台设备,我必须每台设备声明两次,这似乎是多余的。还有其他方法吗?你介意用额外的,比如说10台设备来展示整个示例,以便更容易了解你在做什么吗?你当然不能做数据库连接。登录内部处理,因为login
不是数据库连接对象的公共方法。明天将发布,我的手在当前状态下不太能用,我现在要睡觉了。不过先谢谢你,晚安。:)好的,我扩展了示例:。正如您所看到的,我不想混淆所有准备好的语句,我也不希望这个val login=LoginDevice.login\u
所带来的冗余(尽管如果没有提供其他解决方案,这将是我的解决方案):)
object DatabaseConnection { this: LoginDevice =>
val Connection = ...
class LoginDevice {
val prep = Connection.prepareStatement("SELECT * FROM USER WHERE NAME = ?")
def login(username: String, password: String) = {
prep.setString(1, username)
val rs = prep.executeQuery
if (!rs.next)
throw User404
new User(rs.getString("Name"), ...)
}
}
}
object RequestHandler {
type Request = (String, String)
def handle(request: Request) = request._1 match {
case "Login" => {
val info = request._2.split(",")
DatabaseConnection.login(info(0), info(1)) // SYNTAX ERROR
}
case _ => throw new Exception("Request type is not valid.")
}
}