[1.7.10] ComputerCraft [1.74]
#2221
Написал 05.07.2013 - 07:24
#2222
Написал 05.07.2013 - 22:32
Хм, значит то я где-то затупил. Просто выдавало ошибку когда я так писал.Вот прямо так и писать. Что тебя смущает то? Скобки cc отлично понимает
shell[paste][/paste]run("prog","arg1","arg2")Ага, спасибо. Когда закончится вызываемая программа, то выполнение вернется обратно к "родительской" программе? И можно ли вернуть значение из "дочерной" программы? То есть что-то типо return?
UPD: Не пойму почему этот код не работает, я в событиях вобще не шарю, может кто растолкует?
#2223
Написал 06.07.2013 - 01:25
key=os[paste][/paste]pullEvent("key") if key == "key203" then x=x-1 endнадо
key, p1=os[paste][/paste]pullEvent("key") if key == "key" and p1 == "203" then x=x-1 endUPD. Вот
#2224
Написал 06.07.2013 - 01:52
То есть функция возвращает два аргумента, даже если указан фильтр? Зачем, ведь key == "key" всегда будет тру если установлен фильтр "key"?3. Если не учитывать разного бреда, то не работает, наверное, из-за
Интересно, сейчас допишу свою функцию, и почитаю.Вот тут объяснял как делать вычислительный сервер с реднет, там как раз запуск программы и вывод.
#2225
Написал 06.07.2013 - 02:06
os[paste][/paste]pullEvent("key")конкретно возвращает 2 значения, ивент "key" и номер кнопки.
#2226
Написал 06.07.2013 - 03:38
Да я понял, я про то что это не логично, возвращать первый аргумент если есть фильтр. Так как:os[paste][/paste]pullEvent("key")конкретно возвращает 2 значения, ивент "key" и номер кнопки.
key == "key" всегда будет тру если установлен фильтр "key"
#2227
Написал 06.07.2013 - 18:14
#2228
Написал 06.07.2013 - 18:19
#2229
Написал 06.07.2013 - 18:44
#2230
Написал 07.07.2013 - 02:06
::continue::UPD: А на goto пишет: '=' expected.
goto continue
#2231
Написал 07.07.2013 - 02:32
#2232
Написал 07.07.2013 - 02:35
http://lua-users.org...ructureTutorial >>Потому что в Lua нет goto и меток.
А вот там же статья по ним: http://lua-users.org...i/GotoStatementMany other languages have a continue statement that skips the rest of the current iteration of the innermost loop. In Lua 5.2, this can be imitated using goto:
> for i = 1, 10 do>> if i>3 and i<6 then goto continue end>> print(i)>> ::continue:: -- a name surrounded in :: :: is a goto label>> end
#2234
Написал 07.07.2013 - 02:44
Чёрт 2.0.3, когда для меток нужна 5.2.0Введи в CC
print(_VERSION)и сравни с той, что там.
Это ненормально...
Про continue я могу забыть?
UPD: Еще возник вопрос, есть ли функция для разрезание строки на элементы по разделителю? Что-то типо:
split("I am string"," ")> I
> am
> string
#2235
Написал 07.07.2013 - 02:57
Ну, конечно же нет! Пробуй, пробуй почаще. Рано или поздно обязательно получиться!Про continue я могу забыть?
Да, есть.Еще возник вопрос, есть ли функция для разрезание строки на элементы по разделителю?
#2236
Написал 07.07.2013 - 03:11
Думаю если continue нету, то его нету.Ну, конечно же нет! Пробуй, пробуй почаще. Рано или поздно обязательно получиться!
Подскажешь как она называется?..Да, есть.
#2237
Написал 07.07.2013 - 03:45
function split(_sSrc, _sSpliter, _nMode) if _nMode == 0 then local _tSplits, nCount = {}, 1 for _sSplit in string[paste][/paste]gmatch(_sSrc, _sSpliter) do _tSplits[nCount] = _sSplit nCount = nCount + 1 end return _tSplits elseif _nMode == 1 then return coroutine[paste][/paste]wrap( function() for _s in string[paste][/paste]gmatch(_sSrc, _sSpliter) do coroutine[paste][/paste]yield(_s) end return nil end ) end return nilend
t = split("a b c", "%a+", 0)print(t[1])print(t[2])print(t[3])>a >b >c
for s in split("1a 2bc 3def 4ghij", "[%a%d]+", 1 ) do print(s)end>1a >2bc >3def >4ghij Если что-то надо объяснить или переписать - говори, мне не влом.
#2238
Написал 07.07.2013 - 04:52
То что нужно!Надеюсь угадал, что тебе надо.
local _tSplits, nCount = {}, 1 for _sSplit in string[paste][/paste]gmatch(_sSrc, _sSpliter) do _tSplits[nCount] = _sSplit nCount = nCount + 1 end return _tSplitsЭто понятно, возвращает массив элементов.
return coroutine[paste][/paste]wrap( function() for _s in string[paste][/paste]gmatch(_sSrc, _sSpliter) do coroutine[paste][/paste]yield(_s) end return nil end )Это как работает? Я просто не знаю что такое coroutine.
for s in split("1a 2bc 3def 4ghij", "[%a%d]+", 1 ) do print(s)endПохоже оно работает так как если вызвать напрямую string.gmatch?
UPD: И что это за ключи: [%a%d]+? Они определяют по какому символу разделять?
#2239
Написал 07.07.2013 - 13:11
Это регулярные выражения. Regex. Мржешь почитать про синтаксис в интернет.И что это за ключи: [%a%d]+? Они определяют по какому символу разделять?
Ага, прикольно получилось .Похоже оно работает так как если вызвать напрямую string.gmatch?
%a - все буквы алфавита. %d - все цифры. + - неограниченное количество знаков. [] - любое из того, что в скобках.И что это за ключи: [%a%d]+?
#2240
Написал 07.07.2013 - 20:45
sideRedstone="left"sideSensor="right"nameD = {"test1", "test2"}os[paste][/paste]loadAPI("ocs/apis/sensor")local nameT = {}rs[paste][/paste]setOutput(sideRedstone, true)function prov(x1,x2) --сверяем два массива, до первого совпадения[paste][/paste] for y1=1, #x1 do for y2=1, #x2 do if x1[y1] == x2[y2] then return true end end end endwhile true do --получаем данные с сенсора и засовываем в массив local targets = sensor[paste][/paste]wrap(sideSensor)[paste][/paste]getTargets() local s = 1 for name in pairs(targets) do nameT[s] = tostring(name) s = s + 1 end if prov(nameD,nameT) then --если проверка прошла открываем двери[paste][/paste] rs[paste][/paste]setOutput(sideRedstone, false) slepp(1) else rs[paste][/paste]setOutput(sideRedstone, true)end
Количество пользователей, читающих эту тему: 3
0 пользователей, 3 гостей, 0 анонимных