为什么要在 ruby​​ 中的属性上使用一元运算符?即&:第一

发布于 2024-11-14 21:28:16 字数 563 浏览 3 评论 0原文

可能的重复:
Ruby/Ruby on Rails 与号冒号快捷方式

作为一种习惯,我尝试并定期阅读一些别人的源代码并对其要点进行评论。现在我正在阅读 sinatra 的基本应用程序,并发现了一段有趣的代码(这是他们的 Request 类的一部分)

def accept
  @env['sinatra.accept'] ||= begin 
    entries = @env['HTTP_ACCEPT'].to_s.split(',') 
    entries.map { |e| accept_entry(e) }.sort_by(&:last).map(&:first)
  end
end

我不明白的部分是 &:last 和 &:first 在做什么?!?看来是疯了!

Possible Duplicate:
Ruby/Ruby on Rails ampersand colon shortcut

As a habit I try and read a little of someone elses source code regularly and comment on it in a gist. Right now I'm reading through sinatra's base app and came upon an interesting bit of code (this is part of their Request class)

def accept
  @env['sinatra.accept'] ||= begin 
    entries = @env['HTTP_ACCEPT'].to_s.split(',') 
    entries.map { |e| accept_entry(e) }.sort_by(&:last).map(&:first)
  end
end

The part I don't get is what is &:last and &:first doing?!? It appears as madness!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦明 2024-11-21 21:28:16

阅读重复问题中的答案,了解 &:... 的含义和用法。在本例中,entries 是一个数组,并且链有 mapsort_bymap 三个方法。 sort_by(&:last) 相当于 sort_by{|x| x.last}map(&:first)map{|x| 相同x.first}。第一个 map 不使用 &:... 的原因是 (i) accept_entry 的接收者不是 e,并且 (ii) 它接受一个参数 e

Read the answers in the duplicate questions for the meaning and usage of &:.... In this case, entries is an array, and there are three methods map, sort_by, and map chained. sort_by(&:last) is equivalent to sort_by{|x| x.last}. map(&:first) is the same as map{|x| x.first}. The reason the first map does not use &:... is because (i) the receiver of accept_entry is not e, and (ii) it takes an argument e.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文