• Haxe Собратья, кто нибудь сталкивался с багом компиляции в cpp таргет, когда в haxe определяешь параметры метода как:
    mathod(?some:Bool = true)
    , а в cpp коде при отсутствии параметра получается:
    method(null())
    ♡ recommended by @grozamorei

Replies (4)

  • @silvertoad, в полку хекса прибыло. enjoy your cross compiling :D
  • @silvertoad, Это не баг, это фича. Если перед аргументов стоит ? то его реальный тип считается Null<Bool> и как следствие придет нулл если вызывать без параметра. Убери вопросик и тип будет булевый, и придет тру. По сюти тут излишняя нотация и вопрос приоритетов, что сработает раньше, сведение к нулл или автоподстановка. Видно что срабатывает раньше Null<Bool>.

    Сделано так, для примитивных безнуловых типов, на случай когда ?v:Int и если v не передать, то приходит именно нулл, а не 0, -1 или еще какая хрень.
  • @deep, Спасибо за разъяснения. Похоже на багу в либе тогда, раз уж она заявлена с поддержкой cpp, то такие неочевидные вещи должны быть продуманы, ИМХО. А то получается neko, flash — оке, а cpp сливается с одним и тем же кодом.
  • @silvertoad, если в других платформах этот код ведет себя иначе, т.е. отдает тру при вызове без параметров, то возможно это таки бага cpp таргета. Как бы 100% совместимости получить не удается, как не старайся, то формат стринговый не тот, то еще чтото.

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