2015-03-29 4 views
1

Я пытаюсь определить метод в Boo, который возвращает две вещи, но компилятор выплевывая сообщение:Синтаксис множественного возврата в Boo?

ожидает «двоеточие», нашел «».

Вот как я попытался определить метод:

from System.Collections.Generic import HashSet 

# ValueParameter is a class defined elsewhere. 
def evaluate(s as string, limit as string) as double, HashSet[of ValueParameter]: 

Я просматривал документы, и хотя я вижу примеры того, как вернуть несколько предметов, я не вижу каких-либо примеров, где они объявите возвращаемый тип как возвращающий несколько типов.

ответ

1

Я нашел the swap example on the wiki, который объявляет функцию, которая использует несколько возвращаемых значений, и запускает ее через компилятор с флагом -p:boo, который выводит кодовое представление окончательной формы АСТ после того, как вся обработка выполнена. Он сообщает, что тип этой функции - (int). Когда вы возвращаете два несходных типа, например, ваш двойной и HashSet, возвращаемый тип - (object).

+0

Я нашел это намеренно установки типа возврата неправильно (в 'строке '), а затем содержимое функции просто будет« return 12.3, HashSet [of ValueParameter]() », и компилятор выплюнул, что он не может использовать' (object) 'to' string'. Следующая проблема закончилась тем, что я не смог найти способ извлечь «двойной» ... Я мог бы получить его как «объект», но он не позволил мне направить его в «double», потому что это «Тип значения» или что-то еще. Поэтому я переосмыслил метод и изменил его, чтобы принять «HashMap», который он изменяет, и он возвращает только «double». – ArtOfWarfare

0

Вы можете импортировать Tuple из System и использовать, чтобы вернуть кортеж типов:

import System 

def string_and_int(s as string, i as int) as Tuple[of string, int]: 
    return Tuple[of string, int](s, i) 

Это сохраняет тип для каждого элемента правильно. Однако имейте в виду, что в Boo, во всяком случае, тип кортежей не итерацию или sliceable, так что вы должны получить его с помощью .Item1, .Item2 и т.д.:

example = string_and_int("s", 2) 
print example.Item1 
# 's' 
print example.Item2 
# 2 
Смежные вопросы