Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для Ashmy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.08.2017
    Сообщений
    18
    Репутация:
    0 ±

    определение типа аргумента функции

    Здравствуйте. Да-да, я знаю что по сути в Pawn'е нет типов данных, но всё же, есть ли способ условно определить тип переменной? Допустим, мы передаём в функцию неизвестное количество аргументов: часть из них - целые числа, часть - с плавающей точкой. Каким образом можно определить какой аргумент у нас целочисленный, а какой с точкой?
    Единственное что приходит на ум, это с помощью цикла проверять нет ли в одном из аргументов точки, если нет - это целое число, но если аргументов будет десятка 2 и сами числа будут большими (допустим, 10-ти значимыми), это довольно сильно увеличит время выполнения функции, проще тогда уже написать две подобных функции: одна для целых чисел и вторую для чисел с точкой. Возможно, я ответил на свой же вопрос
    Последний раз редактировалось Ashmy; 01.11.2017 в 22:34.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну взгляни на тот же sscanf или SetTimerEx. Перечисление в одном из аргументов, которое выглядит как
    "ifs[]..." нужно как раз для того, чтоб можно было легко определить тип аргумента. Как-то иначе это сделать трудно
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для Слава КПСС
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.08.2017
    Сообщений
    11
    Репутация:
    0 ±
    Ты сейчас пошутил? То есть как бы bool, Float, text и т.д. это не канает за тип данных?

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Слава КПСС Посмотреть сообщение
    Ты сейчас пошутил? То есть как бы bool, Float, text и т.д. это не канает за тип данных?
    Это теги для компилятора. А вещественные числа вообще подтянуты разработчиком сампа со стороны и существуют лишь благодаря функциям, которые отдельно работают с этими числами. Вот тебе простое доказательство

    PHP код:
    main()
    {
        new 
    int;
        
    int _:1.5;//"сбросим" тэг, дабы компилятор не ругался
        
    printf("\n\n%0.1f\n\n"int);//Выведем нашу целочисленную переменную, используя спецификатор вещественного типа

    В консоли ты увидишь "1.5", хотя, казалось бы, мы пытаемся просунуть в целочисленную переменную вещественный тип данных.

    То же самое и с bool
    PHP код:
    main()
    {
        new 
    bool:var;
        var = 
    bool:7;
        
    printf("\n\n%d\n\n", var);//Отобразит "7", хотя, по идее, в переменную типа boolean нельзя записать значения, отличные от true/false

    Pawn - не типизированный язык.

    UPD: И да, это не означает, что нужно повсеместно использовать эту "фичу" языка. Тэги для того и были придуманы, чтоб:
    1) Защитить скриптера от возможных ошибок при записи одних "типов" данных в места, не предназначенные для этого.
    2) Улучшить читаемость.




    Автор:
    Вот тут я как-то писал для одного нехорошего человека функцию, которая позволяла бы, вроде, делать форматирование запросов сразу внутри этой функции (писал уже давно и сейчас лень вникать. Но код, сразу говорю, не самый лучший, ибо это больше эксперимент, который заброшен на пол пути и не доведён до ума). И там видно как можно реализовать определение типа переданного аргумента
    Последний раз редактировалось DeimoS; 02.11.2017 в 00:01.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. 2 пользователя(ей) сказали cпасибо:
    Ashmy (02.11.2017) Слава КПСС (03.11.2017)
  6. #5
    Аватар для Ashmy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.08.2017
    Сообщений
    18
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Это теги для компилятора. А вещественные числа вообще подтянуты разработчиком сампа со стороны и существуют лишь благодаря функциям, которые отдельно работают с этими числами. Вот тебе простое доказательство

    PHP код:
    main()
    {
        new 
    int;
        
    int _:1.5;//"сбросим" тэг, дабы компилятор не ругался
        
    printf("\n\n%0.1f\n\n"int);//Выведем нашу целочисленную переменную, используя спецификатор вещественного типа

    В консоли ты увидишь "1.5", хотя, казалось бы, мы пытаемся просунуть в целочисленную переменную вещественный тип данных.

    То же самое и с bool
    PHP код:
    main()
    {
        new 
    bool:var;
        var = 
    bool:7;
        
    printf("\n\n%d\n\n", var);//Отобразит "7", хотя, по идее, в переменную типа boolean нельзя записать значения, отличные от true/false

    Pawn - не типизированный язык.

    UPD: И да, это не означает, что нужно повсеместно использовать эту "фичу" языка. Тэги для того и были придуманы, чтоб:
    1) Защитить скриптера от возможных ошибок при записи одних "типов" данных в места, не предназначенные для этого.
    2) Улучшить читаемость.




    Автор:
    Вот тут я как-то писал для одного нехорошего человека функцию, которая позволяла бы, вроде, делать форматирование запросов сразу внутри этой функции (писал уже давно и сейчас лень вникать. Но код, сразу говорю, не самый лучший, ибо это больше эксперимент, который заброшен на пол пути и не доведён до ума). И там видно как можно реализовать определение типа переданного аргумента
    Мне как раз определение и нужно было для реализации функции отправки запроса, но, я уже определился с тем, как можно сделать проще и лучше. Спасибо за помощь

  7. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Ashmy Посмотреть сообщение
    Мне как раз определение и нужно было для реализации функции отправки запроса, но, я уже определился с тем, как можно сделать проще и лучше. Спасибо за помощь
    Ну так поделись с остальными своей идеей, раз уж нашёл своё решение :)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А вещественные числа вообще подтянуты разработчиком сампа со стороны
    Не "разработчиком сампа", а лично автором Pawn. Разрабы SA-MP добавили только несколько тригонометрических функций: asin(), acos(), atan() и atan2().
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. Пользователь сказал cпасибо:
    DeimoS (02.11.2017)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •