2016-11-19 5 views
1

Может ли метод Crystal-lang возвращать несколько значений определенного типа?Метод Crystal возвращает несколько значений

Я знаю, что он может быть реализован таким образом:

def my_method(arg_1 : Int, arg_2 : String) : Tuple 
    return arg_1, arg_2 
end 

res_1, res_2 = my_method(1, "1") 

, но он также будет работать, если я делаю:

result = my_method(1, "1") #=> {1,"2"} 

, но я могу сделать somethink как в Go-lang

def my_method(arg_1 : Int, arg_2 : String) : Int, String 
    return arg_1, arg_2 
end 

???

Спасибо!

ответ

3

Кристаллические методы могут возвращать только одно значение. Способ «вернуть несколько значений» заключается в возврате кортежа, а затем, если хотите, немедленно распакуйте его на сайте вызова, например, что вы сделали.

Если вы хотите, чтобы указать тип возвращаемого значения вы можете сделать:

def my_method(arg_1 : Int, arg_2 : String) : {Int32, String} 
    return arg_1, arg_2 
end 

Or (то же самое, только другой синтаксис):

def my_method(arg_1 : Int, arg_2 : String) : Tuple(Int32, String) 
    return arg_1, arg_2 
end 

Вы также можете использовать более короткий синтаксис для возврата нескольких значения:

def my_method(arg_1 : Int, arg_2 : String) 
    {arg_1, arg_2} 
end 

То есть, делает return 1, 2 внутренне так же, как Ретур с кортежем {1, 2}.

В конце концов, не имеет значения, как это реализовано, возможно, в Go функция не возвращает два значения, а передает указатели или что-то в этом роде, а затем в сборке нет даже функций, так что важно, если вы можете возвратить несколько вещей, а затем сразу же получить их сразу.

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