可能重复:
map(&:name)在Ruby中意味着什么?
在Ruby中,我知道如果我这样做:
some_objects.each(&:foo)
Run Code Online (Sandbox Code Playgroud)
它是一样的
some_objects.each { |obj| obj.foo }
Run Code Online (Sandbox Code Playgroud)
也就是说,&:foo创建块{ |obj| obj.foo },将其转换为Proc,并将其传递给每个块.为什么这样做?它只是一个Ruby特例,还是有理由为什么这样做呢?
可能重复:
map(&:name)在Ruby中意味着什么?
我遇到了一个代码片段,其中包含以下内容
a.each_slice(2).map(&:reverse)
Run Code Online (Sandbox Code Playgroud)
我不知道&:运营商的功能.这是如何运作的?
我已经看过好几次,但我无法弄清楚如何使用它们.镐说这些是特殊的快捷方式,但我无法找到语法描述.
我在这样的背景下见过他们:
[1,2,3].inject(:+)
Run Code Online (Sandbox Code Playgroud)
以计算总和为例.
我正在阅读Stackoverflow并偶然发现以下代码
array.map(&:to_i)
Run Code Online (Sandbox Code Playgroud)
好的,很容易看出这段代码的作用,但我想了解更多关于&:我以前从未见过的构造.
不幸的是,我能想到的只是"lambda",而不是.谷歌告诉我Ruby中的lambda语法是->->(x,y){ x * y }
所以&:除了调用单一方法之外,任何人都知道神秘是什么以及它能做什么?
我发现Ruby中的这段代码非常有趣
(1..4).inject(&:+)
Run Code Online (Sandbox Code Playgroud)
好的,我知道是什么inject,我知道这段代码基本上相当于
(1..4).inject(0) {|a,n| a + n}
Run Code Online (Sandbox Code Playgroud)
但它究竟是如何运作的呢?
为什么&:+和写块一样{|a,n| a + n}?
为什么它不需要初始值?我很好,正常值为0,但(1..4).inject(&:*)也有效,初始值必须为1 ...
为了更好地理解Ruby,我遇到了上网冲浪的代码:
require 'rubygems'
require 'activeresource'
ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/events.log")
class Event < ActiveResource::Base
self.site = "http://localhost:3000"
end
events = Event.find(:all)
puts events.map(&:name)
e = Event.find(1)
e.price = 20.00
e.save
e = Event.create(:name => "Shortest event evar!",
:starts_at => 1.second.ago,
:capacity => 25,
:price => 10.00)
e.destroy
Run Code Online (Sandbox Code Playgroud)
我特别感兴趣的是如何events.map(&:name)工作?我看到事件是一个数组,因此它正在调用它的map方法.现在我的问题是,传递给地图的块在哪里创建?符号是什么:在这种情况下的名称?我试图了解它是如何工作的.
例如,
contacts.sort_by(&:first_name).
Run Code Online (Sandbox Code Playgroud)
我理解这是做什么的,但我不明白&:符号,这意味着什么,它是一个符号(:)与块(&)?我在哪里可以阅读更多相关信息?
我目前正在尝试转换这个ruby数组:
[5, 7, 8, 1]
Run Code Online (Sandbox Code Playgroud)
进入这个:
[[5], [7], [8], [1]]
Run Code Online (Sandbox Code Playgroud)
什么是最好的方式?
我现在这样做:
[5, 7, 8, 1].select { |element| element }.collect { |element| element.to_a }
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
警告:默认`to_a'将过时
我究竟做错了什么?你能告诉我如何做到这一点吗?
在此先感谢您的问候!
可能重复:
map(&:name)在Ruby中意味着什么?
我正在观看railscasts更多的虚拟属性插曲.在那一集中,有一次,ryan使用了我无法理解的地图方法语法,有人可以解释一下吗?
tags.map(&:name).join(' ')
Run Code Online (Sandbox Code Playgroud)
tags是Tag Model的一个对象,它具有name属性.我能够理解这个的含义(我想是:)).所有标记对象的name属性都作为数组检索并基于''连接.但最重要的是什么&:name
谢谢
可能重复:
map(&:name)在Ruby中意味着什么?
什么是&:valid?在发现each意味着什么?我见过.each do |r|或者其他什么,但不确定这个是如何工作的?
只是看一些railscast并看到这样的代码:
[Category, Product, Person].each(&:delete_all)
Run Code Online (Sandbox Code Playgroud)
我知道它会删除这些模型的所有记录,但我无法找出这&:delete_all意味着什么.
我昨天在这里提出的问题的答案是以下一段Ruby代码:
def overlap?(r1,r2)
r1.include?(r2.begin) || r2.include?(r1.begin)
end
def any_overlap?(ranges)
ranges.sort_by(&:begin).each_cons(2).any? do |r1,r2|
overlap?(r1, r2)
end
end
Run Code Online (Sandbox Code Playgroud)
我明白了each_cons,但奇怪的&:begin记法是什么?救我脱离语法地狱!
谢谢!