Перейти к содержимому


Фотография

[1.7.10] ComputerCraft [1.74]


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2863

#2781 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 23.04.2014 - 09:41

Помогите, совсе уже запутался, что я не так делаю?
Может кто провести краткий ликбез - как работать с таблицами?

Дело в том, что таблицы histid и histms локальные в блоке if pmr==0 then ... end и по завершении этого блока просто перестают существовать.
А shell.run("clear") это круто :D

#2782 Playermet

Playermet

    Олежа :3

  • Главные модераторы
  • Сообщений: 9368
  • Откуда: Макеевка, ул.Ленина,д.84/16

Написал 23.04.2014 - 09:48

Может кто провести краткий ликбез - как работать с таблицами?

Могу. Так выглядит конструктор таблицы.
local foo = {}
В конструкторе можно указывать значение. По умолчанию они получат числовые индексы по порядку начиная с единицы.
local foo = {'a', 'b', 'c'}-- foo[1] == 'a'-- foo[2] == 'b'-- foo[3] == 'c'
Ключи можно указать явно. В этом случае они могут быть не обязательно числовыми, целыми, или положительными.
local foo = {[-1]='a', [0]='b', ['1bar1']='c'}
Если ключ является строкой, выполняющий требование к именам идентификаторов (состоит только из букв, цифр, символа подчеркивания, первый символ не цифра, и строка не совпадает с ключевыми словами lua), то скобки и кавычки можно опустить.
local foo = {bar=1, _=2, bar2=3}
Вместо запятых можно использовать точку с запятой. Также мы можем оставить один разделитель после последнего элемента.
local foo = {bar=1; _=2; bar2=3;}
В таблицу в любой момент можно добавить новый элемент. Если элемент с таким ключем уже существует, он будет заменен. Получить доступ к элементу можно этим же путем.
local foo = {}foo['some key'] = 5local value = foo['some key']
Если ключ является строкой, выполняющий требование к именам идентификаторов, то скобки и кавычки можно опустить.
local foo = {}foo[paste][/paste]key = 5
Ключем и значением элемента таблицы может быть любое число, строка, булеан, функция, таблица, или даже корутин и юзердата. Таблица может включать даже саму себя.
local foo = {}foo[foo] = foofoo[true] = function() end
Присвоение элементу nil означает его удаление. Элементы при этом не сдвигаются.
local foo = {1, 2, 3}foo[2] = nil
Таблица может иметь "дыры" в индексах.
local foo = {1, nil, 3} -- тут только 2 элемента
Получить число непрерывной серии элементов с целыми числовыми ключами, начинающимися с единицы можно так.
local foo = {[0] = 0, 1, 2, 3, 4[paste][/paste]1 = 4[paste][/paste]1, [5] = 5, bar = 'bar'}print(#foo)  -- 3
Обойти все элементы (с любыми ключами) можно так. Порядок обхода элементов при этом не определен.
local foo = {a=1, b=2, c=3}for k,v in pairs(foo) do  print(k,'=',v)end
По быстрому добавить элемент в конец таблицы можно так.
local foo = {1, 2, 3}foo[#foo + 1] = 4
Удалить элемент из таблицы со двигом можно так. Второй аргумент - индекс удаляемого элемента.
local foo = {1, 2, 3}table[paste][/paste]remove(foo, 2)
Таблицы передаются в функции по ссылке. Это значит что изменив таблицу внутри функции она изменится и снаружи. То же самое касается и присваивания таблиц.
local foo = {1, 2, 3}local bar = foobar[3] = nilprint(foo[3]) -- nil
Контруктор таблиц можно использовать на месте, не создавая переменных.
function print_size(t) print(#t) endprint_size ({1, 2, 3}) -- 3

Для форумчан можно просто Олег.

Скрытый текст

#2783 KaMaPuK

KaMaPuK

    Добытчик алмазов

  • Пользователи
  • Сообщений: 681
  • Откуда: СПб

Написал 23.04.2014 - 10:18

а если мне надо будет буквенно-цифровой пароль?

Можно добавить монитор побольше, с буквами и цифрами. )) Хотя не думаю что кто-то сможет подобрать хотя бы шестизначный пароль из цифр.. Честно говоря не пробовал заменять пулл-эвент, да и вообще не применяю кодовые замки. Лично мне просто использование монитора с 10ю цифровыми клавишами больше нравится, эстетичнее что ли.. Да и терминал открывать не надо, так носом натыкал и все ))

, да я тоже не вижу смысла в них, проще уж поставить скрытую дверь из carpenter block. а кодовые замки - больше для изучения СС использую(например на заводе есть комп, который при ctrl+T не останавливает программу, а запускает второй процесс), хотя на каком-то паблик сервере построил биокупол, вход в который управлялся через сенсорную панель.
рандом он такой рандом....а если корейский так вообще забей)

#2784 Playermet

Playermet

    Олежа :3

  • Главные модераторы
  • Сообщений: 9368
  • Откуда: Макеевка, ул.Ленина,д.84/16

Написал 23.04.2014 - 10:32

Дело в том, что таблицы histid и histms локальные в модуле if pmr==0 then ... end и по завершении этого модуля просто перестают существовать.

Это называется блок.
Модулями в луа называется то, что подлючается через require. В CC это кажется отключено.

Для форумчан можно просто Олег.

Скрытый текст

#2785 Cyxapuk

Cyxapuk

     

  • Главные модераторы
  • Сообщений: 8706
  • Ник в Minecraft:
    Meegoo

Написал 23.04.2014 - 12:22

Т.е. foo.bar = "some string" совершенно аналогична foo[bar] = "some string" и foo["bar"] = "some string"?
Ну если исключить тот факт, что во 2 и 3 можно использовать переменную типа String, вместо самой строки.

V6xCzSN.png


#2786 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 23.04.2014 - 12:27

Т.е. foo.bar = "some string" совершенно аналогична foo[bar] = "some string" и foo["bar"] = "some string"?

Нет.
foo.bar = "some string" аналогично foo["bar"] = "some string"
А вот если bar="bar" то и foo[bar] = "some string"
Но это справедливо только для случая когда bar не является ключевым словом.
Например foo.end="some string" вызовет ошибку, а foo["end"]="some string" - отработает нормально

#2787 Cyxapuk

Cyxapuk

     

  • Главные модераторы
  • Сообщений: 8706
  • Ник в Minecraft:
    Meegoo

Написал 23.04.2014 - 12:41

А, понял. Кавычки можно опускать только в конструкторе.

V6xCzSN.png


#2788 glebqip

glebqip

    Странник

  • Пользователи
  • Сообщений: 58

Написал 23.04.2014 - 16:39

Сделал всё как сказали - перешёл на pullEventRaw(ошибок не обнаружил), добавил переменную которая выбирает тип открытия(но оно глючит из-за пропадания сигнала редстоуна если выбран 2й тип открытия и нажмут ctrl+r или ctrl+s), сделал таблицу кодов и открытие с кнопки на другой стороне(настраивается):
Скрытый текст


#2789 Kellso

Kellso

    Странник

  • Пользователи
  • Сообщений: 5

Написал 24.04.2014 - 02:57

Спасибо что помогли мне, теперь все работает!А теперь, пожалуйста, объясните как работают подпрограммы (coroutine)? :ROFL:

#2790 Playermet

Playermet

    Олежа :3

  • Главные модераторы
  • Сообщений: 9368
  • Откуда: Макеевка, ул.Ленина,д.84/16

Написал 24.04.2014 - 09:05

Для начала, не подпрограммы, а сопрограммы. У подпрограммы только одна точка входа.Ты точно уверен, что оно тебе сейчас нужно? Я до сих пор не встречал у себя реальной задачи, где нельзя было бы обойтись другим способом. А ты только что к таблицам приступил, что есть самые основы.

Для форумчан можно просто Олег.

Скрытый текст

#2791 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 24.04.2014 - 11:16

А теперь, пожалуйста, объясните как работают подпрограммы (coroutine)?

Попробуй для начала parallel.waitForAll(f1,f2,...)
Это почти тоже самое, но гораздо проще. Оно позволяет запускать на выполнение несколько функций параллельно.
А в coroutine без знания таблиц действительно нечего делать.

#2792 zzex

zzex

    Странник

  • Пользователи
  • Сообщений: 2

Написал 24.04.2014 - 13:10

Привет. Может это и не та тема, но создавать новый топик не хотел... У меня не работает setBundledOutput в связке с Bundled проводами из Project Red
  rs[paste][/paste]setBundledOutput("back", colors[paste][/paste]white)
Версия Minecraft 1.6.4 Версия ComputerCraft 1.58 Версия Project Red 4.3.2.26 Может кто сталкивался? Помогите пожалуйста :oops:

#2793 Cyxapuk

Cyxapuk

     

  • Главные модераторы
  • Сообщений: 8706
  • Ник в Minecraft:
    Meegoo

Написал 24.04.2014 - 13:13

А он и не должен работать. Эта фича для проводов PR не предусмотрена. Но для того же мфр работает.

V6xCzSN.png


#2794 Playermet

Playermet

    Олежа :3

  • Главные модераторы
  • Сообщений: 9368
  • Откуда: Макеевка, ул.Ленина,д.84/16

Написал 24.04.2014 - 13:13

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

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

А в coroutine без знания таблиц действительно нечего делать.

Корутины вообще не используют таблицы.

Для форумчан можно просто Олег.

Скрытый текст

#2795 zzex

zzex

    Странник

  • Пользователи
  • Сообщений: 2

Написал 24.04.2014 - 13:18

А он и не должен работать. Эта фича для проводов PR не предусмотрена. Но для того же мфр работает.

что за МФР? и в связке с http://www.minecraft...ra-peripherals/ тоже не работают, хотя пишут что должны =(

#2796 Cyxapuk

Cyxapuk

     

  • Главные модераторы
  • Сообщений: 8706
  • Ник в Minecraft:
    Meegoo

Написал 24.04.2014 - 13:27

Minefactory Reloaded

V6xCzSN.png


#2797 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 24.04.2014 - 13:49

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

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

Передача управления из одного процесса в другой и обратно это и есть распараллеливание процессов. Псевдораспараллеливание. Именно так и работает parallel - на корутинах.

А в coroutine без знания таблиц действительно нечего делать.

Корутины вообще не используют таблицы.

Ну да. Интегрирование это не умножение, значит изучать интегралы можно не зная таблицы умножения

#2798 Playermet

Playermet

    Олежа :3

  • Главные модераторы
  • Сообщений: 9368
  • Откуда: Макеевка, ул.Ленина,д.84/16

Написал 24.04.2014 - 14:14

Передача управления из одного процесса в другой и обратно это и есть распараллеливание процессов.

Только не нужно скатывать разговор в тавтологию. Распараллеливание процессов не имеет ничего общего с работой корутинов. В Lua вообще нет таких сущностей как процесс. К тому же, функции parallel имеют конкретное специфичное назначение, в котором чистые корутины практически никогда не используются. Поэтому никакой речи о "Это почти тоже самое" быть не может.

Интегрирование это не умножение, значит изучать интегралы можно не зная таблицы умножения

Вообще-то изначально ты сказал, что нельзя использовать coroutine не имея представления о таблицах. Что естественно неверно. Теперь ты просто перефразировал мой же совет другому человеку, мне же в ответ. Ну и чего ты хотел этим сказать?

Для форумчан можно просто Олег.

Скрытый текст

#2799 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 24.04.2014 - 17:12

Спасибо что помогли мне, теперь все работает!
А теперь, пожалуйста, объясните как работают подпрограммы (coroutine)?
:ROFL:

Основное отличие сопрограммы (coroutine) от подпрограммы состоит в том, что подпрограмма всякий раз при вызове начинает выполняться с начала. Сопрограмма же имеет промежуточные точки выхода, в которые можно вернуться. Схематически это изображается как то так.
Изображение

#2800 Kellso

Kellso

    Странник

  • Пользователи
  • Сообщений: 5

Написал 07.05.2014 - 12:18

Подскажите работающий компьютер грузит чанки? Если нет, то что грузит?


Количество пользователей, читающих эту тему: 8

0 пользователей, 8 гостей, 0 анонимных