【问题标题】:I have Integers in an array that I need converted to strings我在需要转换为字符串的数组中有整数
【发布时间】:2023-03-28 12:12:01
【问题描述】:

当我输入时

digicollect=[]
digicollect[0]=2

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

另外,当我输入时

"Hello" * 2 

我得到“你好你好”

但是如果我输入

2 * "Hello"

它不起作用。

"hello" * digicollect

不起作用。 但是

"hello" * digicollect[0]

确实有效。

为什么?

【问题讨论】:

  • 缺少一个非常重要的标签。您使用的是哪种技术?
  • 我正在使用命令提示符,并在其中使用 irb。红宝石 2.0 版

标签: ruby arrays string integer irb


【解决方案1】:

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

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

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

因此,当您编写"hello" * digicollect 时,您试图调用一个字符串的乘法方法并将其传递给一个数组,而该方法根本不知道如何处理它(它只会接受整数),这就是为什么您得到错误。

【讨论】:

  • 我明白了。这真的很有用谢谢。有没有办法查看建议?
  • 我对您键入的内容感到有些困惑“字符串例外和整数数组除了整数或字符串 Fixnum 需要数字或整数”。例外是指接受还是期望?
  • 希望把事情弄清楚。真正尝试阅读每种类型的文档,看看 *-method 对每个类做了什么。
【解决方案2】:

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

String 没有* 运算符作为数组参数,而 number 没有* 运算符和字符串参数。但是,String 确实有带有数字参数的 *,并且 digicollect[0] 访问该数组元素的数值。

【讨论】:

  • 好的,谢谢!所以现在我想知道为什么如果我输入“hello”*(digicollect[0]-5) 它不会给我答案,只是“否定论点”?
  • 您不能将字符串乘以负数。例如,如果digicollect[0] 是 2,那么你减去 5,得到 -3。
【解决方案3】:

digicollect 本身不是数字,这就是为什么你不能“乘”它。但它包含数字,这就是 "hello" * digicollect[0] 起作用的原因。

至于 2 * "Hello" 的情况,我相信这是语言的语法问题——字符串必须在前,整数在后。

【讨论】:

  • 好的,知道了。非常感谢:)
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多