Перейти к контенту

Рекомендуемые сообщения

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

  Информация (Показать)

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

  Читать рекомендуется. (Показать)

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

 

 

  Desertir писал(а):
Почему тебе следующий вариант не нравится?
function isBool(value)
    type(value) == 'boolean'
end

да хотя-бы потому, что это не рабочий вариант. Вы сами то попробовали её запустить? Я попробовал, у меня не получилось ее даже в SciTE запихнуть. Ругается. А так все нормально, все буковки правильные.

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

И так можно перебрасываться очень долго, пока меня окончательно не забанят. По сему на этом всё.

Ссылка на комментарий
  Карлан писал(а):

Расшифруй.

Я о том, что type возвращает одну из строк

  Цитата

nil, boolean, number, string, userdata, function, thread, table

Они все известны, их конечное число и они описаны в доках, и мне непонятна фраза про непредсказуемые моменты. Всё вполне предсказуемо. Ну типы то надо знать... Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

 

 

  Desertir писал(а):
Ну типы то надо знать...

Типы то я знаю, а вот Вы так и не поняли, что функуция проверяет не типы, а объекты. Ведь это две большие разницы, не правда ли? Или Вы и с этим не согласны?

Ссылка на комментарий

@Desertir, там все ясно, он мне в личку отписал, он путает перевод в булево с проверкой существования переменной, причем с относительно НЕпустым значением.
Приведу цитату (просьба не притягивать за уши и опять меня в чем-то обвинять):

  Цитата

Неверно. Если такой объект существует (буть то функция, нить, userdata и т.д) она вернёт true, а если не существует (нет его в _G), то вернёт false. Все корректно.

Это никак не проверка типа на булево.

 

Если попробовать поискать что-то подобное у себя, то только такое могу предложить:

function is_correct(x) return not (is_false(x) or is_nil(x)) end

 Для toboolean у меня используется двойное отрицание, в таком виде lua безопасно переводит любой тип в булево значение, следует только учитывать при работе с нулем и единицей, их не переводит, они оба true, потому при работе с нулем как false следует это учитывать.

Изменено пользователем Карлан
Ссылка на комментарий

 

 

  Карлан писал(а):
он путает перевод в булево с проверкой существования переменной

я не собираюсь ни в чем, никого обвинять, просто прошу напомнить где я говорил о "переводе в булево"? Может я что-то забыл, тогда я не прав. Я всё время твержу о проверке зачения объекта, а не его типа. Переименуйте функцию в thisObjIs(var) и забудьте про тип возвращаемого ею значения. Тогда может вопросы отпадут?

Ссылка на комментарий
  Serge! писал(а):

да хотя-бы потому, что это не рабочий вариант

Очевидно надо дописать return, про который я забыл, ошибка очень легко диагностируемая, появляется частенько если писать код быстро. У меня такое бывает, ошибаюсь. Вопрос только в том, почему для тебя это не очевидно?

  Serge! писал(а):

Вам не кажется, что это уже в простой трёп переходит? Я же Вам ничего не советовал.

Нет, не кажется, я хочу помочь, однако советов я не давал, я только задавал вопросы. Несколько наводящие, но вопросы, чтобы ты сам постарался понять свою проблему.

  Serge! писал(а):

что функуция проверяет не типы, а объекты

Конечно объекты, в Луа нет работы напрямую с типами, отчасти мета-таблицы, которые хоть немного привносят рефлексию. Это же скриптовый язык, он должен быть простым.

  Карлан писал(а):

он путает перевод в булево с проверкой существования переменной

Ну ок. В JavaScript вообще все просто, написал два раза восклицательный знак вот и перевел в булево :)

  Карлан писал(а):

используется двойное отрицание

Вот и я об этом.
  • Спасибо 1

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий
  Desertir писал(а):
ты сам постарался понять свою проблему.

У меня конкретно в этом случае нет проблемы, это раз.
Два, в последний раз повторяю, я не проверяю типы, не пытаюсь перевести их в булево, а проверяю значение объекта на факт его существования и на то, что он не пустой (number не 0, string не "" и т.п.). И только результат такой проверки получаю в виде булевского значения. Других слов снять вашу зашторенность у меня просто нет, извините. Разве что переименуйте мысленно эту функцию из isBool(var) в thisIsObj(var) и тогда возможно станет понятнее моя цель.
А за вопросы, особенно наводящие, большое человеческое спасибо.

 

  Desertir писал(а):
в Луа нет работы напрямую с типами

добавлю. И здесь Вы не правы. В Lua допускается и имеется возможность изменения типа значения, ограниченная правда, но имеется.
Примеры: 1. указанное Карлан двойное отрицание. 2. tonumber(var) - перевод в тип number. 3. tostring(var) - перевод в тип string.
Продолжить? или этого достаточно?
Ссылка на комментарий

Нужна помощь со строками

Нужно получить из строки(s) текст от 1 пробела до второго.

индекс 1 пробела нахожу, а вот со 2 пробелом проблема.

Подскажите пожалуйста.

 

 

  Показать

 

Ссылка на комментарий

@FonSwong, захватываем всё, что после первого пробела и не относится к пунктуации.

local s = "! Волк, где ты?"
print(s:match("%s(%P*)")) --> печатает 'Волк'

@Serge!, продолжай.  :D

Изменено пользователем Charsi
Ссылка на комментарий

@FonSwong, документация по луа от Иерусалимского (не хочу ударятся в брюзжание, но надо читать шапку темы), там и про строки и про паттерны, а твой спойлер это жуть :)

Ссылка на комментарий

@FonSwong, абсолютно бессмысленные оболочки непонятно зачем (сделанные) и для чего, это просто нагромождение, хлам если хочешь.

Ссылка на комментарий
  Serge! писал(а):

Разве что переименуйте мысленно эту функцию из isBool(var) в thisIsObj(var) и тогда возможно станет понятнее моя цель.

Я даже не знаю что на это сказать. Я понимаю, что тема была про проверку на существование и пустоту, но почему isBool? Это не просто неверное именование функции, это наименование для заблуждения читающего, случайное или намеренное - не важно. Важно то, что ты предоставил свой вариант общественности, и он весьма странный.

  Serge! писал(а):

И здесь Вы не правы

Я про Фому, а ты мне про Ерёму. Я говорю о типах как о значениях.

  Serge! писал(а):

В Lua допускается и имеется возможность изменения типа значения

Тип значения ты изменить не сможешь. Можно изменить тип переменной. Значение это строка или число, которые ты написал в код. Ты никак не скажешь компилятору "вот тебе число, но интерпретируй его как строку". Число есть число, строка есть строка. А вот переменная будет иметь тип согласно последнему присвоенному значению, т.к. Луа - динамический ЯП. Поэтому в нем нет приведения типов на уровне языка (о чем кстати ты и говоришь), они реализованы в виде функций toTYPE и, как ты сказал, весьма в ограниченном виде. Но это не то, о чем я говорил.

  Serge! писал(а):

Продолжить? или этого достаточно?

На твое усмотрение, подискутировать я всегда могу. Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий
  16.10.2015 в 16:42, Карлан сказал:

@FonSwong, абсолютно бессмысленные оболочки непонятно зачем (сделанные) и для чего, это просто нагромождение, хлам если хочешь.

Оболочки сделаны для более удобного вызова, так как в них сразу проверки на пустоту и тд.

Спасибо за наводки:)

Ссылка на комментарий

Никогда не мог подумать, что для постоянных посетителей этого ресурса требуется какой-то ликбез по терминологии в области программирования. Однако последние станицы показали, что некоторым такое будет полезно. Заодно и сам кое-что освежил.

 

 

  Показать

 

Ссылка на комментарий

Не получается вывести рандомное значение из таблицы, ругается на аргумент

 

  Показать

 

Изменено пользователем FonSwong
Ссылка на комментарий

@FonSwong, оператор # применяется к индексированным массивам, а у тебя tbl_sos - ассоциативный.

  • Нравится 1
Ссылка на комментарий
@FonSwong, если есть расширения RvP - используй функцию random для таблиц. Если нет, напиши сам - создай индексированный массив из ключей таблицы tbl_sos и выбери рандомный айди, а по нему уже получи значение из tbl_sos. Изменено пользователем RayTwitty
Ссылка на комментарий

Сделал просто через индексированный.

 

 

Расширение RvP что это и с чем едят, объясните по простому, пожалуйста:)

И как соорудить ассоциативный

Изменено пользователем FonSwong
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...