2011-03-11 3 views
0

Новое для Ruby и работа над проблемой, когда я пытаюсь принять несколько аргументов splat в методе. Я думаю, я понимаю, почему он дает мне ошибку компиляции, но я не уверен, как это исправить. Любая помощь в использовании нескольких символов в аргументах будет полезна. Заранее благодарю вас за любые рекомендации.Ruby 1.9.2 - проблема с множественным аргументом splat

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

Пример использования аргументов Splat:

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

puts sum(1,2,3) 

Обратите внимание, как аргументы указаны непосредственно, а не внутри [].

Если метод определил второй аргумент splat, невозможно определить, когда первый заканчивается, а второй начинается.

+0

Спасибо gnab - высоко ценим! – Gavin

Смежные вопросы