RubyMonk指出如何使用下划线来方便地编写大数字,这些数字在没有划分的情况下会变得难以阅读。
他们的任务是:尝试使用下划线来制作一个巨大的,可读的数字。他们提供此代码:
def describe(something)
puts "I am a: #{something.class} and I look like: #{something}"
end
def big_num
# create a huge number
end
describe(big_num)
任何人都可以解释我将如何创建一个庞大的数字?根据下面的错误消息,我必须在代码中使用下划线才能通过。
答案 0 :(得分:2)
RubyMonk需要一个类Bignum的对象,它是标准Ruby库的一部分。来自文档:
Bignum对象保持Fixnum范围之外的整数。 BIGNUM 整数计算时会自动创建对象 否则会溢出Fixnum。
所以你只需要创建一个比Fixnum可以处理的数字更大的数字。例如,这将通过RubyMonk的规范:
def big_num
5_000_000_000_000_000_000_000
end
因为数量大于Fixnum可以处理的数量,Ruby会自动返回Bignum。例如,尝试运行:
5_000_000_000.class
# => Fixnum
5_000_000_000_000_000_000_000.class
# => Bignum
答案 1 :(得分:2)
Ruby允许使用下划线作为占位符(即它们只是为了提高人类的可读性,否则会被忽略)。因此,您的big_num
方法只能有一行:
return 1_000_000_000_000_000_000_000_000_000_000_000
并且调用它将返回1000000000000000000000000000000000
(return
关键字是可选的)
答案 2 :(得分:1)
Ruby允许您在编写文字数字时添加下划线,以便更容易阅读大数字。
约定规定,如果数字长度为4位或更少,则不应使用下划线,如果长度较长,则不应使用每三位数字,从右侧开始:
10_000_000 # => 10000000
也适用于浮动数字:
10_000.0 # => 10000.0
如果您将下划线放在两位数之间,则下划线会被忽略:
1_2_3_4_5 # => 12345
查看错误消息后,很明显RubyMonk期待Bignum
。这是另一个魔术,解释器透明地执行 - 如果数量足够小以映射到体系结构的int,则该数字是Fixnum
的实例:
100.class # => Fixnum
如果不是这样,Ruby会自动使用专用类(Bignum
):
(10_000_000**100).class # => Bignum
# 10_000_000 to the power of 100,
# which is a very big number and
# thus stored in Bignum