如果您不能没有参数,那么该参数必须保留。仅仅因为具有小签名的方法是首选,这并不意味着当每个参数都是必需的时,长方法签名是不好的。
但是,如果您真的想作弊并缩短签名,您可以尝试:
class DoubleSeries
def self.generate_sequences(array_args)
seq1_start, seq2_start, seq1_step, seq2_step, iterations = *array_args
seq1,seq2=seq1_start,seq2_start
result=[]
(1..iterations).each do
result << seq1 << seq2
seq1+=seq1_step
seq2+=seq2_step
end
result
end
end
但是,我会争辩说,我写的内容不如您最初写的内容清晰(因为论点更加模棱两可)。我只是给出了一个代码示例来向您展示您只能有一个参数,但这可能不是最好的方法。
做你想做的另一种方法是改变你生成序列的方式。例如
class DoubleSeries
def self.generate_sequence(seq1_start, seq1_step, iterations)
seq1=seq1_start
result=[]
(1..iterations).each do
result << seq1
seq1+=seq1_step
end
result
end
end
x = DoubleSeries.generate_sequence(1,5,5)
y = DoubleSeries.generate_sequence(4,6,5)
x.zip(y).flatten
或者,使用 Ruby 2.0 和惰性枚举器:
range = 1..Integer::INFINITY
seq_1 = range.lazy.collect{|n| (n-start_1 % seq_1_step) == 0}.first(iterations)
seq_2 = range.lazy.collect{|n| (n-start_2 % seq_2_step) == 0}.first(iterations)
seq_1.zip(seq_2).flatten