lambda表达式由啥组成
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lambda表达式由啥组成相关的知识,希望对你有一定的参考价值。
参考技术ALambda表达式是什么?
可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。
匿名——我们说匿名,是因为它不像普通的方法那样有一个明确的名称:写得少而想得多!
函数——我们说它是函数,是因为Lambda函数不像方法那样属于某个特定的类。但和方法一样,
Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表。
传递——Lambda表达式可以作为参数传递给方法或存储在变量中。
简洁——无需像匿名类那样写很多模板代码。
Lambda表达式的语法与组成
Lambda表达式由参数、箭头、主体组成。如下图:
参数列表——这里它采用了Comparator中compare方法的参数,两个Apple。
箭头——箭头->把参数列表与Lambda主体分隔开。
Lambda主体——比较两个Apple的重量。表达式就是Lambda的返回值了。
所以,Lambda表达式的基本语法可以总结为:
(parameters)
->
expression 或 (parameters)
->
statements;
对照上面的语法,下表列出了一些常用的Lambda表达式:
Rails/Devise 会话中的warden 数据由啥组成?
【中文标题】Rails/Devise 会话中的warden 数据由啥组成?【英文标题】:What is the warden data in a Rails/Devise session composed of?Rails/Devise 会话中的warden 数据由什么组成? 【发布时间】:2014-06-29 03:32:50 【问题描述】:Rails 会话中的“数据”如下所示:
"warden.user.user.key" => [[1], "long-random-string"]
1 是用户 ID。什么是长随机字符串?
这是由 Rails 或 Devise 处理/使用的东西吗?
【问题讨论】:
【参考方案1】:当您登录user
(设计模型名称User
)时,会创建一个密钥"warden.user.model_name.key"
,在您的情况下为"warden.user.user.key"
。
例如:
warden.user.user.key => [[1], "$2a$10$KItas1NKsvunK0O5w9ioWu"]
在哪里
1
是登录用户的id
。
$2a$10$KItas1NKsvunK0O5w9ioWu
又名long-random-string
是ID为1
的用户的部分加密密码。
您可以通过继续rails console
并执行来验证这一点
User.find(1).encrypted_password
## => "$2a$10$KItas1NKsvunK0O5w9ioWuWp4wbZ4iympYMqVCRmmvTGapktKqdMe"
更新
你能告诉我更多关于这个部分加密的密码吗?为什么是部分而不是完整的?
为了在评论中回答您的上述问题,Devise
通过调用authenticatable_salt
方法将部分encrypted_password
存储在会话中。 Devise
存储部分 encrypted_password
,因为它比在会话中暴露完整的 encrypted_password 更可靠(即使它已加密)。这就是为什么encrypted_password
的前 30 个字符[0,29]
被提取并存储在会话中的原因。
# A reliable way to expose the salt regardless of the implementation.
def authenticatable_salt
encrypted_password[0,29] if encrypted_password
end
您可以在此处查看 authenticatable_salt 的代码。
在哪里/何时使用?它被 Devise 使用,还是被 Rails 使用,或者两者都使用?
Devise
使用它进行身份验证,以验证特定用户是否已登录。理想的用例是,特定 Rails 应用程序如何在新页面时跟踪用户的登录方式被要求。由于 HTTP 请求是无状态的,因此无法判断给定请求实际上来自登录的特定用户?这就是为什么会话很重要,因为它们允许应用程序跟踪登录用户从一个请求到另一个请求,直到会话过期。
【讨论】:
谢谢!你能告诉我更多关于这个部分加密的密码吗?为什么它是部分而不是完整的?它在哪里/何时使用?它被 Devise 使用,还是被 Rails 使用,或者两者都使用? (或者随时引导我到某个地方阅读此内容——但我在任何地方都找不到好的解释器) @JohnBachir 请阅读我更新的答案。希望能帮助你理解。 史诗般的答案——谢谢!积分!我仍然有点不清楚目的是什么,但现在我很容易自己探索它。 (我不明白这与盐有什么关系。盐通常是与用户一起存储的字符串,用于执行单向哈希并使被盗的哈希对猜测明文密码无用)。 jonathanleighton.com/articles/2013/… 有一些关于在更改密码时用于使现有会话无效的盐的额外见解:新密码的盐将不同于存储在会话中的盐,因此会话是被拒绝。有关字符串内容的更多信息,请访问***.com/a/6833165/395180以上是关于lambda表达式由啥组成的主要内容,如果未能解决你的问题,请参考以下文章