如何将对象作为参数传递给其在Ruby中的方法
问题描述:
我试图为Fixnum类定义factorial方法,我不知道如何将这个Fixnum作为参数传递给我的方法。 正试图写这样的东西如何将对象作为参数传递给其在Ruby中的方法
def Fixnum.factorial(n)
n > 1 ? n * factorial(n-1) : 1
end
虽然我知道这将是不正确的。那么有没有某种“这个”保留字来访问这个数字?
答
事情是这样的:
class Fixnum
def factorial
self > 1 ? self * (self - 1).factorial : 1
end
end
puts 6.factorial
# 720
你知道,当然,这是计算阶乘的一个愚蠢的方法?
傻?怎么会这样? (如果'*'是一个'+',那么我就知道这很愚蠢)。 – steenslag 2012-03-13 09:13:20
你不需要递归。简单的循环将会很好。 – 2012-03-13 09:14:58
好吧,数学上正确,但计算上“愚蠢”(=非常低效)。用TCO语言使用的尾部呼叫析因可以。在Ruby中,我可能会写'(2..n).inject(1,:*)'。 – tokland 2012-03-13 09:17:39