2011-03-11 1 views
0

Ruby를 처음 접하고이 메소드에서 여러 개의 Splat 인수를 허용하려는 문제가 발생했습니다. 내가 왜 컴파일 오류를 내고 있는지 이해할 수 있다고 생각하지만, 어떻게 해결해야할지 모르겠다. 인수에 여러 개의 표시를 사용하는 방법에 대한 도움이 도움이 될 것입니다. 여기에 대한 안내를 주셔서 미리 감사드립니다. 플랫 인수를 사용Ruby 1.9.2 - 복수 표시 인수 문제

def find_max_expenses(salary, save_prcnt, *pre_ret_g_rates, *post_ret_g_rates, epsilon) 
years = pre_ret_g_rates.count 
savings = nest_egg_variable(salary, save_prcnt, pre_ret_g_rates) 
savings = savings[-1] 
low = 0 
high = savings 
expenses = (low + high)/2 

# can use the [-1] at the end is equivalent to the code below 
remaining_money = post_retirement(savings, post_ret_g_rates, expenses) #[-1] 
remaining_money = remaining_money[-1] 
while remaining_money > epsilon  # the value we want to stay above 
    if remaining_money > 0 
    low = expenses 
    else 
    high = expenses 
    end 
    expenses = (high + low)/2 
    remaining_money = post_retirement(savings, post_ret_g_rates, expenses) 
    p remaining_money = remaining_money[-1] 
end 
p expenses 
end 
find_max_expenses(10000, 10, [3, 4, 5, 0, 3], [10, 5, 0, 5, 1], 0.01) 
+5

splat 인수에 일반 인수 (예 : *를 제거하면 코드가 지금 사용하는 방식대로 완벽하게 작동해야합니다. 배열로 메서드를 호출하면 splat 인수가 필요하지 않습니다. 또한 첫 번째 끝과 다른 끝이 시작될 때를 결정할 방법이 없기 때문에 두 개의 표시 인수는 의미가 없습니다. – gnab

답변

7

예 : 인수가없는 [] 내에서 직접 지정하는 방법을

def sum(*nums) 
    sum = 0 
    nums.each do |num| 
    sum += num 
    end 
    sum 
end 

puts sum(1,2,3) 

알 수 있습니다.

메서드에서 두 번째 splat 인수를 정의한 경우 첫 번째 끝나고 두 번째 시작되는 시간을 결정할 수 없습니다.

+0

감사합니다 gnab - 많이 감사합니다! – Gavin