查看如何计算数字的阶乘,我遇到了这段代码:
(1..5).inject(:*) || 1 # => 120
Run Code Online (Sandbox Code Playgroud)
什么是(:*) || 1做什么?
它是如何比较这行代码(1..5).inject(1) { |x, y| x * y } # => 120,它使用.inject来实现类似的功能?
假设我有对象类型A,B和C.我想将它们存储在一个数组中.一种方法是这样的:
A a = new A();
B b = new B();
C c = new C();
Object[] array = {a, b, c};
Run Code Online (Sandbox Code Playgroud)
从设计角度来看,这不太理想,因为您现在需要知道数组[0]是A类型,但与Ruby或Python等允许此类事物的语言不同.
也就是说,另一个选择是创建一个自定义类D来保存该信息:
private class D {
public A myA;
public B myB;
public C myC;
public D(A a, B b, C c) {
//...
}
}
D[] otherArray = new D[1];
otherArray[0] = new D(a, b, c);
Run Code Online (Sandbox Code Playgroud)
哪种方法更好?出于设计原因,我可以看到第二种方法的论点(尽管其他语言一直都在讨论这个问题).
从性能的角度来看,第一种方法的必要的向上/向下投影比重复创建新的D对象更昂贵,反之亦然?