Компилятор выделит статическую переменную (переменные), определенную в функции foo
при загрузке программы, однако компилятор также добавит некоторые дополнительные инструкции (машинный код) к Вашей функции foo
так, чтобы в первый раз это было вызвано, этот дополнительный код инициализирует статическую переменную (например, вызов конструктора, если применимо).
@Adam: Это негласно инжекция кода компилятором является причиной результата, который Вы видели.
Никогда не использовал "sound ()", но когда я воспроизводил звук с помощью wavplay (..., ..., 'async'), я могу остановить звук, выполнив
clear playsnd
Возможно, что работает со звуком ()? Примечание: это при асинхронном воспроизведении. Для синхронного воспроизведения я предполагаю, что CTRL-C должен его сломать, но у меня были проблемы с wavplay () в последний раз, когда я пробовал это.
Вы также можете изучить библиотеку 'io / wait' для Ruby, которая предоставляет метод ready?
всем объектам ввода-вывода. Я не тестировал вашу ситуацию специально, но использую ее в библиотеке на основе сокетов, над которой я работаю. В вашем случае, при условии, что STDIN - это просто стандартный объект ввода-вывода, вы, вероятно, могли бы выйти в тот момент, когда готов?
вернет результат, отличный от нуля, если вы не хотите узнать, какая клавиша была фактически нажата. Эту функциональность можно реализовать с помощью require 'io / wait'
, который является частью стандартной библиотеки Ruby. Я не уверен, что он работает во всех средах, но попробовать стоит. Rdocs: http: // ruby-doc.
может приостановить или остановить воспроизведение звука один раз
инициирован WAVPLAY. Вместо того, чтобы использовать
WAVPLAY, альтернативой является создание
объект AUDIOPLAYER. Этот тип
объект имеет методы, которые позволяют
приостановка, возобновление и остановка
воспроизведение звука. Например:
player = audioplayer(Y, Fs)
% start the playback
play(player);
% pause the playback
pause(player);
% resume the playback
resume(player)
% stop the playback
stop(player)
Вместо этого используйте объект audioplayer - он дает вам полный контроль над тем, что вы делаете со звуком. Т.е.:
player = audioplayer(x, fs);
play(player) % start the player
stop(player) % stop whenever you like...
В аудиоплеере есть много других полезных вещей: http://www.mathworks.com/help/techdoc/ref/audioplayer.html