Ruby `长度`待解释的方法

Ruby `长度`待解释的方法,ruby,Ruby,示例1是一个数组循环: 例1 第二个示例是一个循环: 例2 将length应用于示例2后,我收到一个错误。为什么?除了计算整数的总长度外,长度还有什么用途?因为默认情况下,长度未在Fixnum上定义。示例1使用长度为您提供数组计数器的长度 独立执行的示例2没有任何意义。Fixnum没有方法长度。以最简单的方式解释: 如果它是一个数组,那么从技术上讲,它可以用.length来测量内容。 例如,如果我的篮子里有3个鸡蛋,我在上面用了.length,我会得到答案3,对吗 现在,如果我们只有一个鸡蛋,我

示例1是一个数组循环:

例1

第二个示例是一个循环:

例2

将length应用于示例2后,我收到一个错误。为什么?除了计算整数的总长度外,长度还有什么用途?

因为默认情况下,长度未在Fixnum上定义。

示例1使用长度为您提供数组计数器的长度


独立执行的示例2没有任何意义。Fixnum没有方法长度。

以最简单的方式解释:

如果它是一个数组,那么从技术上讲,它可以用.length来测量内容。 例如,如果我的篮子里有3个鸡蛋,我在上面用了.length,我会得到答案3,对吗

现在,如果我们只有一个鸡蛋,我在上面画了一个3,我告诉你要计算鸡蛋的数量,它基本上总是计算为1,这并不是你想要实现的,所以Ruby抛出一个异常,因为它不允许这种行为。它不允许对Fixnum调用.length

在第一个例子中,你可以这样想:

 #- Basket                  => your array (counter[])
 #- Egg                     => an element in the array
 #- A Painted number on egg => the *value* of the element in the array

# I have an empty basket
basket = []

# While my basket has less than 3 eggs, keep letting the user add more eggs
while basket.length < 3

  puts("Tell me a cool thing!")

  # Get an egg from the user
  egg = gets.chomp             #=> gets.chomp is the number the user paints on the egg

  # Put that egg in the basket
  basket.push(egg)
end

# So how many eggs are in the basket?
puts basket.length   #=> 3
为了简单起见,我将跳过其余部分,直接进入第二个示例:

第二个例子 同样的情况。篮子、鸡蛋和油漆

# Hey! What happened to the basket? Arrays are baskets! This is just some thing! I guess you want to PAINT a 1 on the basket?
basket = 1

# While my only basket that has a 1 painted on it is less than 11 baskets
while basket.length < 11

   # Show me the number that painted on my only basket
   puts basket

   # Now paint a 2 on my only basket
   basket += 1
end
注意到我说我唯一的篮子了吗?在这种情况下,您将始终只有一个篮子。我们所做的就是在每个循环上画一个不同的数字

TL;博士

fixNum没有.length方法。如果是这样的话,几乎每个循环都是无限循环,因为1<11的计算结果永远不会为false。这是因为只有一个Fixnum,它所表示的值本质上是无关的,基本上是一个画在盒子外面的标记

如果你在一个盒子上画5个,并不意味着你有5个盒子

数组有一个.length方法,因为您可以计算数组中的东西的数量,就像计算篮子中鸡蛋的数量一样

希望我能帮忙

关于示例1

Cosider此示例数组:

array_one = [1, 3, 4, 8]
它有多少元素?4.因此,如果我对其调用.length方法:

array_one.length #=> 4
因此返回'4'。length只返回数组中的元素数。如果你仔细想想,它有点像它的长度,使用元素作为单位

接下来,计数器实际上是一个空数组:

有多少元素?因此,零

counter.length #=> 0.
返回“0”

关于示例2

在这种情况下,计数器=1,与示例1中的计数器无关。因此,您已将数字1分配给变量计数器。这绝对不是一个数组。简而言之,不能对数字应用.length方法。例如,在以下示例中尝试应用.length:

2.length #=> NoMethodError...

在这里,您试图对数字应用.length方法,默认情况下,该方法对Ruby没有意义,并返回NoMethodError。在你的例子中:

counter.length #=> NoMethodError
给出一个错误,因为您正试图对一个数字调用.length方法,但您不能这样做


在Ruby中,整数属于FixNum类,默认情况下该类没有.length方法,因此命名为NoMethodError。如果我是你,如果可以的话,我会尝试更好地理解类和方法。它将对您非常有用。

只需添加一些内容,例如2。。显然,代码将在没有.length的情况下运行,而示例1则不会。在示例2中,计数器是一个数字,而不是数组。数字没有长度方法。这就是它接收错误的原因。length方法的目的是计算数组的长度/大小。就这样。如果你觉得其中任何一个答案都有帮助,不要忘记选择一个答案。
counter.length #=> 0.
2.length #=> NoMethodError...
444.length #=> NoMethodError...
counter.length #=> NoMethodError