【发布时间】:2014-03-28 22:50:43
【问题描述】:
我试图理解为什么这段代码有效。具体来说,
1.compose的方法定义中,为什么要新建一个Proc?为什么不创建新的proc就不能调用proc2和proc1?
2.我尝试创建函数'double_then_square',但它只能作为一个任务。是不是因为方法中不能有方法?递归不是一个反例吗,或者是你不能在方法中拥有不同方法的规则?
def compose(proc1, proc2)
Proc.new do |x|
proc2.call(proc1.call(x))
end
end
square_it = Proc.new do |n|
n ** 2
end
double_it = Proc.new do |n|
n * 2
end
double_then_square = compose(double_it,square_it)
puts double_then_square.call(1)
【问题讨论】:
-
如果您描述了如何尝试创建您所说的
double_then_square函数,将会有所帮助。另外,请尝试扩展一下您认为递归与此相关的方式。 -
另外,还有一个问题:您为什么要特别使用 ruby 来学习这些概念? Ruby 在函数式编程模式(块、方法、过程、lambda 及其微小差异)方面有点古怪,因为它是一种强大的 OO 语言。 Python 或 javascript 可能是更好的选择
-
我之前的问题得到了解答。我只使用 Ruby,因为那是我一直遵循的指南。您认为有必要切换语言来理解这些概念吗?
-
不,完全没有,ruby 确实有它们。只是它不那么容易适应他们,你会不断地遇到本质上的 OO。 Python、Javascript 和 Ruby 都是多范式,但 Python 和 Javascript 更偏向 FP,而 Ruby 更偏向 OOP。