Обнаружьте нажатие клавиши (не блокирующееся) w/o getc/gets в Ruby

Вот решение в Python.

#!/usr/bin/env python

def brackets_match(brackets):
    stack = []
    for char in brackets:
        if char == "{" or char == "(" or char == "[":
            stack.append(char)
        if char == "}":
            if stack[-1] == "{":
                stack.pop()
            else:
                return False
        elif char == "]":
            if stack[-1] == "[":
                stack.pop()
            else:
                return False
        elif char == ")":
            if stack[-1] == "(":
                stack.pop()
            else:
                return False
    if len(stack) == 0:
        return True
    else:
        return False

if __name__ == "__main__":
    print(brackets_match("This is testing {([])} if brackets have match."))
19
задан Robert K 3 June 2009 в 19:39
поделиться

2 ответа

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

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

  • Должен ли веб-сервер находиться на отдельном физическом компьютере, а не база данных? Если это так, то в производственной среде.
  • Должна ли база данных быть в точности идентична производственной база данных? Точная структура, она может быть заполнена фиктивными значениями.
  • Может ли промежуточная среда отключиться для обслуживания? Да.
  • Можно ли использовать промежуточную среду для тестирования новых функций (т.е. бета env)? Нет, для этого я бы использовал среду разработки или тестирования. Постановка должна быть для функций, которые будут немедленно запущены в производство (например, " Это означает, что вашим пользователям нужно будет нажать Q , затем . Если ты хочешь сделать небуферизованный ввод-вывод, я бы предложил проверить библиотеку ruby ​​curses.

13
ответ дан 30 November 2019 в 03:20
поделиться

Вы также можете изучить библиотеку 'io / wait' для Ruby, которая предоставляет метод ready? для всех объектов ввода-вывода. Я не тестировал вашу ситуацию специально, но использую ее в библиотеке на основе сокетов, над которой я работаю. В вашем случае, при условии, что STDIN - это просто стандартный объект ввода-вывода, вы, вероятно, могли бы выйти в тот момент, когда готов? вернет результат, отличный от нуля, если вы не хотите узнать, какая клавиша была фактически нажата. Эту функциональность можно получить с помощью require 'io / wait' , который является частью стандартной библиотеки Ruby. Я не уверен, что он работает во всех средах, но попробовать стоит. Rdocs: http://ruby-doc.org/stdlib/libdoc/io/wait/rdoc/

1
ответ дан 30 November 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: