При попытке решить вопрос How to print a sqlite table content with genie programming language Я узнал, что могу попытаться вызвать PrintSingleRecipe в качестве обратного вызова из Database.exec. Тем не менее, кажется, что обратный вызов не может быть регулярной функцией, у них есть свойство, которое я, кажется, не обнаружил в интернетах.Как использовать Sqlite.Callback в Genie
Я называю это следующим образом:
else if response is "3" //Show a Recipe
res:string = UserInterface.raw_input("Select a recipe -> ")
sql:string = "SELECT * FROM Recipes WHERE pkID = %res"
db.exec(sql, PrintSingleRecipe, null)
И сама функция выглядит следующим образом:
def PrintSingleRecipe(n_columns:int, values:array of string, column_names:array of string)
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
for i:int = 0 to n_columns
stdout.printf ("%s = %s\n", column_names[i], values[i])
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
print "Ingredient list"
print " "
stdout.printf("%-5s", "%03i")
Однако, я получаю следующее сообщение об ошибке при компиляции:
valac --pkg sqlite3 --pkg gee-0.8 cookbook.gs
cookbook.gs:42.26-42.42: error: Argument 2: Cannot convert from `PrintSingleRecipe' to `Sqlite.Callback?'
db.exec(sql, PrintSingleRecipe, null)
^^^^^^^^^^^^^^^^^
Compilation failed: 1 error(s), 0 warning(s)
Как правильно запустить обратный вызов в Genie?
Привет, AIThomas, как вызвать переменную res из строки sql? Синтаксис, который я использовал, не работает: '' 'res: string = UserInterface.raw_input (« Выбрать рецепт -> ») sql: string =" SELECT * FROM Recipes WHERE pkID =% res "' '' –
Вы можете use string concatenation: 'sql: string =" SELECT * FROM Recipes WHERE pkID = "+ res" или шаблон: 'sql: string = @" SELECT * FROM Recipes WHERE pkID = $ res "' – AlThomas