Полиморфные функции. Библиотека. Версия 1.0

Библиотека реализующая полиморфные функции. Инструкция по установке и использованию:

haxelib install PolymorphFunction

Во FlashDevelop создаем проект, например haXe/Flash:

Заходим Project -> Properies -> Compiler Options -> Libraries
добавляем туда строчку PolymorphFunction

package ;

import flash.Lib;

enum MyEnum {q; w; e;}

class Main
{
        static var myfunc:Dynamic = PolymorphFunction.parse([
                function(a:Int, b:Int) { return a + b; },
                function(a:Int, b:Int, c:Int) { return a + b + c; },
                function(value:String) { return "Hello, " + value + "!"; },
                function(first:Float, two:String) { return Std.string(first) + " -> " + two; },
                function(p1:{ x:Int, y:Int }, p2:{ x:Int, y:Int } ){return { x:p1.x + p2.x, y:p1.y + p2.y };},
                function(arr:Array<Dynamic>) { return "This is Array<Dynamic>"; },
                function(arr:Array<Int>) { return "This is Array<Int>"; },
                function(arr:Array<{x:Int}>) { return "This is Array<{Int}>"; },
                function(a:MyEnum) { return "This is MyEnum";  },
        ]);
       
        static function main()
        {
                trace(myfunc(10,20)); //30
                trace(myfunc(1,2,3)); //6
                trace(myfunc("Mr.Cheater")); //Hello, Mr.Cheater!
                trace(myfunc(1.5, "DOG")); //CAT -> DOG
                trace(myfunc( { x:10, y:20 }, { x:5, y: -10 } )); //{x:15, y:10}
                trace(myfunc( [[10, 20], 30] )); //This is Array<Dynamic>
                trace(myfunc( [10, 20, 30] )); //This is Array<Int>
                trace(myfunc( [{x:10}, {x:20}, {x:30}] )); //This is Array<{Int}>
                trace(myfunc( MyEnum.q )); //This is MyEnum
        }
}

Комментарии

спасибо

интересно, хотя привычки пользоваться полиморфными функциями нет.
поставил и попробовал, сделал небольшой тест на основе пример всё работает как ожидается )
может пригодиться наверное, чтобы делать порт чего-ндь с Java или других языков где это одна из фич языка.

кстати, как впечатление от haxelib со стороны публикующего свой код? всё так же просто и лаконично как для пользователя? можно в двух словах?

Как я использовал haxelib

Создал папку
в ней создал файл haxelib.xml с описанием библиотеки.

<project name="PolymorphFunction" url="" license="GPL">
    <user name="MrCheater"/>
    <description>Polymorph function</description>
    <version name="1.0">Initial release, everything is working correctly</version>
</project>

туда же скинул единственный класс PolymorphFunction.hx

упаковал папку в ZIP

Вбил в консольку:
haxelib test D:\EDU\PolymorphFunction.zip

Если всё нормально, то выкладываем библиотеку:
haxelib submit D:\EDU\PolymorphFunction.zip

Библиотека оказалась тут
http://lib.haxe.org/files/
отсюда ее можно устанавливать стандартным образом через haxelib install

haxelib rules

отлично! опубликовать свой код на haxelib действительно очень просто
еще раз спасибо.

При написании

При написании использовал macro-функции. Думаю буду развивать и дальше, пока не будет так же удобно как в функциональном языке Erlang

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].
  • Use [gist:####] where #### is your gist number to embed the gist.

Подробнее о форматировании

CAPTCHA
Для отсева спамеров
Y
d
r
H
q
w
Enter the code without spaces and pay attention to upper/lower case.