2015-06-28 2 views
3

Я нашел код Валы, и он отлично работает. , но когда я переводил его на джинн, он не удался. Итак, мой вопрос, что это эквивалент код GenieЧто такое синтаксис общих методов в Genie?

int get_length<T> (T val) { 
    if (typeof(T) == typeof(string)) { 
     return ((string)val).length; 
    } else { 
     GLib.error("Unable to handle type `%s'", typeof(T).name()); 
    } 
} 

public static void main() { 
    var myString = "hello"; 
    stdout.printf("%i\n", get_length<string>(myString)); 
} 

мой код: джин

def get_length of T (val: T): int 
    if typeof(T) == typeof(string) 
     return ((string)val).length 
    else 
     pass 
init 
    var s = "hello"; 
    stdout.printf("%i", get_length of string (s)) 

сообщение об ошибке:

main.gs:2.16-2.17: error: syntax error, expected `(' but got `of' with previous identifier 
def get_length of T (val: T): int 
       ^^ 

обновление:

в код работает.

init 
    printx of int (123) 
    printx (456) 
    printx ("HELLO") 

def printx (i: T) of T 
    case typeof(T) 
     when 64 // typeof(string) 
      stdout.printf ("%s\n", (string)i) 
     when 24 // typeof(int) 
      stdout.printf ("%i\n", (int)i) 

, но если я хочу, чтобы иметь возвращаемое значение

Стараюсь

def doubleit (i: T): T of T 

и сообщения об ошибках:

2015-06-29_generic_func.gs:13.27-13.27: error: The type name `T' could not be found 
def doubleit (i: T): T of T 
         ^
2015-06-29_generic_func.gs:13.22-13.27: error: The type name `T' could not be found 
def doubleit (i: T): T of T 
        ^^^^^^ 
2015-06-29_generic_func.gs:13.18-13.18: error: The type name `T' could not be found 
def doubleit (i: T): T of T 
       ^
Compilation failed: 3 error(s), 0 warning(s) 

и попробовать

def doubleit (i: T) of T : T 

сообщения об ошибках:

2015-06-29_generic_func.gs:13.26-13.26: error: syntax error, expected end of line but got `:' with previous identifier 
def doubleit (i: T) of T : T 
         ^
Compilation failed: 1 error(s), 0 warning(s) 

этот код работает в Вала:

T doubleit<T> (T i) { 
+0

Что значит «это не удалось»? –

+0

Я не знаю, Genie, или Vala, но угадывая из [документации Genie о дженериках] (https://wiki.gnome.org/Projects/Genie#Generics), я бы предположил, что у вас могут быть только общие классы, не общие функции/методы. Ошибка компилятора имеет смысл, если это так. – stakx

+0

Я добавил сообщение об ошибке и изменил заголовок вопроса. Мне также интересно, как это будет работать в Genie. –

ответ

2

Поскольку это не представляется возможным в данный момент у меня есть reported it as a bug.

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

  • Нет связанных вопросов^_^