示例1是一个数组循环:
示例1
counter = []
while counter.length < 3
puts("Tell me a cool thing!")
counter2 = gets.chomp
counter.push(counter2)
end
puts("Here's some cool things in backward order:")
counter3 = counter.length - 1
while counter3 >= 0
puts(counter[counter3])
counter3 = counter3 - 1
end
第二个例子是循环:
示例2
counter = 1
while counter.length < 11
puts counter
counter += 1
end
将length
应用于示例2,我收到错误。为什么?除了计算整数的总长度之外,length
的目的是什么?
答案 0 :(得分:1)
以最简单的方式解释:
如果它是一个数组,它可以在技术上用.length
“测量”内容。
例如,如果我的篮子中有3个鸡蛋,并且我使用了.length
,我会得到答案3,对吗?
现在,如果我们只有一个鸡蛋并且我画了一个3,并且我告诉你要计算鸡蛋的数量,它基本上总是评估为一个,这不是真正的你试图完成,所以Ruby抛出异常,因为它不允许这种行为。 (它不允许在.length
)
Fixnum
所以在第一个例子中,您可以这样想:
#- 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; DR 强>
Fixnum
没有.length
方法。如果确实如此,几乎每个循环都是无限循环,因为1&lt; 11永远不会评价为假。这是因为只有一个 Fixnum,它所代表的值基本上是无关紧要的,并且基本上是在盒子外面绘制的标记。
如果你在一个盒子上画5,这并不意味着你有5个盒子。
数组采用.length
方法,因为你可以计算它们内部的数量,就像计算一篮子里的蛋数一样。
希望我帮忙!
答案 1 :(得分:0)
示例1 使用length来为您提供数组counter
的长度。
示例2 ,独立执行,没有任何意义。 Fixnum
没有方法length
。
答案 2 :(得分:0)
重新举例1
Cosider这个示例数组:
array_one = [1, 3, 4, 8]
它有多少元素? 4.所以,如果我在其上调用.length
方法:
array_one.length #=> 4
&#39; 4&#39;返回,因此.length
只返回数组中的元素数。如果你考虑一下,它有点像使用元素作为单位的长度。
继续之后,计数器实际上是一个空数组:
counter = []
有多少元素?零,因此
counter.length #=> 0.
&#39; 0&#39;归还。
重新做例2
在这种情况下counter = 1
(并且与示例1中的计数器无关)。因此,您已将数字 1分配给变量计数器。这绝对不是一个数组。简而言之,您无法在数字上应用.length
方法。例如,尝试在以下示例中应用。length
:
2.length #=> NoMethodError...
或
444.length #=> NoMethodError...
在这里,您尝试在数字上应用.length
方法,默认情况下对Ruby没有意义并返回NoMethodError。所以在你的例子中:
counter.length #=> NoMethodError
出现错误,因为您尝试在号码上调用.length
方法,而您无法做到。
在Ruby中,整数属于 FixNum类,默认情况下没有.length
方法(因此NoMethodError)。如果我是你,如果可以的话,我会尝试更好地理解课程和方法。这对你真的很有用。
答案 3 :(得分:-1)
因为默认情况下length
未定义Fixnum
。