作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在阅读 Play !框架文档,我遇到了这个片段:
def index = Action { implicit request =>
session.get("connected").map { user =>
Ok("Hello " + user)
}.getOrElse {
Unauthorized("Oops, you are not connected")
}
}
implicit
那里:
Alternatively you can retrieve the Session implicitly from a request
Function1[Int, Function1[Int, Int]]
返回类型的第一个参数是
Int
,因此阻止我们将其注释为
implicit
.这将导致对其高级返回类型的混淆:
() => Int
或
Int => Int
...
Action
开始,前面的代码片段的行为是隐式的。的必需参数是文字函数。
Action.apply()
的多重签名方法:
def apply(block: Request[AnyContent] => Result): Action[AnyContent]
def apply(block: => Result): Action[AnyContent]
(重定向到第一个)最佳答案
考虑以下代码:
class MyImplicitClass(val session: Int)
object Tester {
def apply(fun: MyImplicitClass => Int): Int = ???
def apply(fun: => Int): Int = ???
}
Tester { implicit myImplicitClass => session * 20}
def session(implicit myImplicitClass: MyImplicitClass): Int = myImplicitClass.session
myImplicitClass
将传递给函数
session
为了访问字段
myImplicitClass.session
, 允许您省略字段访问。这正是 Play 的诀窍!框架正在使用,查看
Controller
找到
session
功能。
Tester { myImplicitClass =>
implicit val x = myImplicitClass
session * 20
}
关于scala - 文字函数的隐式参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14270012/
我是一名优秀的程序员,十分优秀!