相关疑难解决方法(0)

map(&:name)在Ruby中意味着什么?

我在RailsCast中找到了这段代码:

def tag_names
  @tag_names || tags.map(&:name).join(' ')
end
Run Code Online (Sandbox Code Playgroud)

什么是(&:name)map(&:name)意味着什么?

ruby syntax operators parameter-passing

483
推荐指数
11
解决办法
12万
查看次数

Ruby &ers冒号快捷方式

可能重复:
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特例,还是有理由为什么这样做呢?

ruby

316
推荐指数
2
解决办法
9万
查看次数

ruby中"&:"运算符的功能是什么?

可能重复:
map(&:name)在Ruby中意味着什么?

我遇到了一个代码片段,其中包含以下内容

a.each_slice(2).map(&:reverse)
Run Code Online (Sandbox Code Playgroud)

我不知道&:运营商的功能.这是如何运作的?

ruby

39
推荐指数
2
解决办法
3万
查看次数

什么是:+和&:+在Ruby中?

我已经看过好几次,但我无法弄清楚如何使用它们.镐说这些是特殊的快捷方式,但我无法找到语法描述.

我在这样的背景下见过他们:

[1,2,3].inject(:+)
Run Code Online (Sandbox Code Playgroud)

以计算总和为例.

ruby

38
推荐指数
1
解决办法
9843
查看次数

你在Ruby中称为&:运算符是什么?

可能的重复:
Ruby/Ruby on Rails&符号冒号快捷方式
map(&:name)在Ruby中意味着什么?

我正在阅读Stackoverflow并偶然发现以下代码

array.map(&:to_i)
Run Code Online (Sandbox Code Playgroud)

好的,很容易看出这段代码的作用,但我想了解更多关于&:我以前从未见过的构造.

不幸的是,我能想到的只是"lambda",而不是.谷歌告诉我Ruby中的lambda语法是->->(x,y){ x * y }

所以&:除了调用单一方法之外,任何人都知道神秘是什么以及它能做什么?

ruby

34
推荐指数
1
解决办法
2万
查看次数

"(1..4).inject(&:+)"如何在Ruby中工作

我发现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

13
推荐指数
1
解决办法
2603
查看次数

理解[ClassOne,ClassTwo] .each(&:my_method)

可能重复:
map(&:name)在Ruby中意味着什么?

我正在看一个railscast并看到了这段代码.

[Category, Product].(&:delete_all)
Run Code Online (Sandbox Code Playgroud)

关于清理数据库.

我询问了IRC中的线路,并被告知

(&:delete_all)
Run Code Online (Sandbox Code Playgroud)

是一个捷径

{|model| model.delete_all}
Run Code Online (Sandbox Code Playgroud)

我用以下测试了这个

class ClassOne
  def class_method
    puts 1
  end
end

class ClassTwo
  def class_method
    puts 2
  end
end

[ClassOne, ClassTwo].each(&:class_method)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误说

Wrong Argument type Symbol (expected Proc)
Run Code Online (Sandbox Code Playgroud)

我也试过了

one = ClassOne.new
two = ClassTwo.new

[one, two].each(&:class_method)
Run Code Online (Sandbox Code Playgroud)

但那仍然失败了.

如果我修改它来阅读

[one, two].each{|model| model.class_method}
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作.

那么,&:delete_all实际上做了什么?文档说这delete_all是一种方法,所以我对这里发生的事情感到困惑.

ruby

12
推荐指数
1
解决办法
3218
查看次数

map(&:name)在这个Ruby代码中做了什么?

为了更好地理解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方法.现在我的问题是,传递给地图的块在哪里创建?符号是什么:在这种情况下的名称?我试图了解它是如何工作的.

ruby ruby-on-rails

10
推荐指数
1
解决办法
2771
查看次数

Ruby:`&:symbol`语法

可能重复:
Ruby/Ruby on Rails&符号冒号

Railscast#167中看到:

def tag_names
    @tag_names || tags.map(&:name).join(' ')
end
Run Code Online (Sandbox Code Playgroud)

这是什么&:name语法,它做什么?

我理解符号是什么,但是&可以将其他类型的对象添加到其中?


重复问题:Ruby&符号冒号快捷方式

ruby syntax

9
推荐指数
0
解决办法
3010
查看次数

这是什么&:最后一个Ruby构造叫做?

可能重复:
map(&:name)在Ruby中意味着什么?

有什么东西survey.map(&:questions).flatten.compact叫做,所以我可以找到更多关于它们的信息:).这&:解决了什么问题,或者它究竟做了什么?它是否用于其他语言?

ruby collections

9
推荐指数
1
解决办法
1476
查看次数