热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

to_a和to_ary有什么区别?-What'sthedifferencebetweento_aandto_ary?

Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别?

What's the difference between to_a and to_ary?

to_a和to_ary有什么区别?

4 个解决方案

#1


40  

to_ary is used for implicit conversions, while to_a is used for explict conversions.

to_ary用于隐式转换,而to_a用于explict转换。

For example:

例如:

class Coordinates
  attr_accessor :x, :y

  def initialize(x, y); @x, @y = x, y end

  def to_a; puts 'to_a called'; [x, y] end

  def to_ary; puts 'to_ary called'; [x, y] end

  def to_s; "(#{x}, #{y})" end

  def inspect; "#<#{self.class.name} #{to_s}>" end
end

c = Coordinates.new 10, 20
# => #

The splat operator (*) is a form of explicit conversion to array:

splat运算符(*)是一种显式转换为数组的形式:

c2 = Coordinates.new *c
# to_a called
# => #

On the other hand, parallel assignment is a form of implicit conversion to array:

另一方面,并​​行赋值是一种隐式转换为数组的形式:

x, y = c
# to_ary called
puts x
# 10
puts y
# 20

And so is capturing collection members in block arguments:

在块参数中捕获集合成员也是如此:

[c, c2].each { |(x, y)| puts "Coordinates: #{x}, #{y}" }
# to_ary called
# Coordinates: 10, 20
# to_ary called
# Coordinates: 10, 20

Examples tested on ruby-1.9.3-p0.

在ruby-1.9.3-p0上测试的实施例。

This pattern seems to be used all over the Ruby language, as evidenced by method pairs like to_s and to_str, to_i and to_int and possibly more.

这种模式似乎在整个Ruby语言中使用,如to_s和to_str,to_i和to_int等可能更多的方法对所证明。

References:

参考文献:

  • Ruby Issue 3680
  • Ruby Issue 3680
  • Variables
  • 变量

#2


19  

to_ary allows an object to be treated as an array, whereas to_a actually tries to convert the parameter into an array.

to_ary允许将对象视为数组,而to_a实际上尝试将参数转换为数组。

to_ary can be useful for parallel assignment, whereas to_a is more suited for an actual conversion.

to_ary对并行赋值很有用,而to_a更适合实际转换。

#3


12  

Quoted from gabew's web space:

引自gabew的网络空间:

Calling #to_a will convert the receiver to an Array, while #to_ary will not.

调用#to_a会将接收器转换为数组,而#to_ary则不会。

ruby-1.9.2-p290 :001 > class A  A[].to_a.class
 => Array

ruby-1.9.2-p290 :005 > A[].to_ary.class
 => A 

#4


0  

to_a, when called on an object returns an array representation of obj

to_a,当在一个对象上调用时,返回一个obj的数组表示

Examples

例子

class Example
  def initialize
      @str = 'example'
  end
end

a = Example.new #=> # [#]

Hash Example

哈希示例

h = { "c" => 300, "a" => 100, "d" => 400, "c" => 300  } 
h.to_a   #=> [["c", 300], ["a", 100], ["d", 400]]

An array can also be created by using the Array() method, provided by Kernel, which tries to call to_ary, then to_a on its argument. http://ruby-doc.org/core-2.0/Array.html#method-i-to_ary

也可以使用由Kernel提供的Array()方法创建一个数组,该方法尝试调用to_ary,然后调用to_a的参数。 http://ruby-doc.org/core-2.0/Array.html#method-i-to_ary

so as far as I can see, the Array#to_ary src just returns the array that is passed in, as in

所以我可以看到,Array#to_ary src只返回传入的数组,如

def to_ary
  return self
end

if I understand correctly, to_a is used for array conversion and makes its final return using to_ary. But this may not be true in future versions according to apidock

如果我理解正确,to_a用于数组转换并使用to_ary进行最终返回。但根据apidock的说法,未来的版本可能并非如此

to_a Returns an array representation of obj. For objects of class Object and others that don’t explicitly override the method, the return value is an array containing self. However, this latter behavior will soon be obsolete. http://apidock.com/ruby/Object/to_a

to_a返回obj的数组表示形式。对于Object类的对象和其他未显式覆盖该方法的对象,返回值是一个包含self的数组。但是,后一种行为很快就会过时。 http://apidock.com/ruby/Object/to_a


推荐阅读
  • 微服务自动化.dockercompose
    目录一、docker-compose二、docker-compose安装与配置1、修改docker.service2、下载文件3、将刚才下载的docker-compose文 ... [详细]
  • 1<table>2<tr>3<th>ID<th>4 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • Cadence SPB 16.5 安装指南与注意事项
    本文提供了详细的 Cadence SPB 16.5 安装步骤,包括环境配置、安装过程中的关键步骤以及常见问题的解决方案。适合初次安装或遇到问题的技术人员参考。 ... [详细]
  • 转自:http:blog.sina.com.cnsblog_67419c420100vmkt.html 1.为什么要使用blocks将一个blocks作为函数或者方法的参数传递,可 ... [详细]
  • 本文详细介绍了一种实现PopupWindow全屏显示且能有效隐藏虚拟按键的技术方案,适用于Android开发。此方法经过实际测试,表现良好,兼容性优秀。 ... [详细]
  • [编程题] LeetCode上的Dynamic Programming(动态规划)类型的题目
    继上次把backTracking的题目做了一下之后:backTracking,我把LeetCode的动态规划的题目又做了一下,还有几道比较难的Medium的题和Hard的题没做出来,后面会继续 ... [详细]
  • 本文详细介绍了利用JavaScript实现的五种不同的网页弹出窗口技术,包括全屏窗口、全屏模式窗口、带收藏链接工具栏的窗口、网页对话框及HTA窗口。 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 本文介绍了在解决Hive表中复杂数据结构平铺化问题后,如何通过创建视图来准确计算广告日志的曝光PV,特别是针对用户对应多个标签的情况。同时,详细探讨了UDF的使用方法及其在实际项目中的应用。 ... [详细]
  • BL550721、特点液晶驱动输出:Common输出4线,Segment输出36线内置显示寄存器364144bit2线串行接口(SCL,SDA)内置震荡电路内置液晶驱动电源电路13 ... [详细]
  • Mysqlcheck作为MySQL提供的一个实用工具,主要用于数据库表的维护工作,包括检查、分析、修复及优化等操作。本文将详细介绍如何使用Mysqlcheck工具,并提供一些实践建议。 ... [详细]
  • 详解MyBatis二级缓存的启用与配置
    本文深入探讨了MyBatis二级缓存的启用方法及其配置细节,通过具体的代码实例进行说明,有助于开发者更好地理解和应用这一特性,提升应用程序的性能。 ... [详细]
  • 本文详细解析 Skynet 的启动流程,包括配置文件的读取、环境变量的设置、主要线程的启动(如 timer、socket、monitor 和 worker 线程),以及消息队列的实现机制。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
author-avatar
干杯彩妮子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有