我在一个数组中有整数,我需要转换为字符串

时间:2014-01-21 21:29:56

标签: ruby arrays string integer irb

当我输入

digicollect=[]
digicollect[0]=2

当我在irb中键入digicollect时,我得到2。

另外,当我输入

"Hello" * 2 

我得到“HelloHello”

但如果我输入

2 * "Hello"

它不起作用。

"hello" * digicollect

不起作用。 但是

"hello" * digicollect[0]

确实有效。

为什么呢?

3 个答案:

答案 0 :(得分:0)

我应该在前言中说我在irb中输入2时没有得到digicollect ...我得到[2]。这是一个值为2的单个元素数组。这与整数值2非常不同。

String对于数组参数没有*运算符,并且number没有带有字符串参数的*运算符。但是,String的*带有数字参数,digicollect[0]访问该数组元素的数值。

答案 1 :(得分:0)

ruby​​中的所有东西都是一个对象,甚至乘法也只是方法调用。

"Hello" * 2"Hello".*(2)

相同

所以当你得到一个错误时,你应该问自己:左手边是否真的有乘法方法,它会接受右手作为参数吗?

digicollect    = []
digicollect[0] = 2

让我们检查一下我们拥有的对象:

p digicollect.class #=> Array
p digicollect[0].class #=> Fixnum
p 2.class #=> Fixnum
p "Hello".class #=> String

现在,如果我们进入* -method的文档,我们会找到每个类所期望的内容:

http://ruby-doc.org/core-2.1.0/String.html#method-i-2A
http://ruby-doc.org/core-2.1.0/Array.html#method-i-2A
http://ruby-doc.org/core-2.1.0/Fixnum.html#method-i-2A

在那里,我们发现会发生什么:

  • String需要一个Integer。 (重复字符串的次数)
  • Array需要Integer或String。 (重复数组x次或使用字符串连接)
  • Fixnum需要一个数字。 (对于简单的乘法)

因此,当您编写"hello" * digicollect时,您试图调用sting的乘法方法并将其传递给Array,并且该方法根本不知道如何处理它(它只接受整数),即为什么你得到错误。

答案 2 :(得分:-1)

digicollect本身不是数字,这就是为什么你不能“乘以”它。它包含数字,这就是为什么“hello”* digicollect [0]有效。

对于2 *“Hello”的情况,我认为这是关于语言的语法问题 - 字符串必须是第一个,整数是第二个。