В Ruby 1.9 вы можете иметь Fixnum
, Float
и Значения символа
, которые разморожены или заморожены:
irb(main):001:0> a = [ 17, 42.0, :foo ]; a.map(&:frozen?)
=> [false, false, false]
irb(main):002:0> a.each(&:freeze); a.map(&:frozen?)
=> [true, true, true]
Я понимаю полезность замораживания строк, массивов или других изменяемых типов данных. Однако, насколько мне известно, экземпляры Fixnum
, Symbol
и Float
неизменяемы с самого начала. Есть ли какая-либо причина для их замораживания (или какая-либо причина, по которой Ruby не сообщает, что они уже заморожены?
Обратите внимание, что в Ruby 2.0 Я получил этот код для включения / выключения основной громкости Я хотел бы знать, как я могу получить общий уровень / процент громкости, потому что я хочу знать, отключен ли уже звук или нет. Изменить:
в противном случае я хотел бы разделить звук включения / выключения звука, чтобы у меня было две функции - одна для отключения звука и одна для включения. спасибо Fixnum
s и Float
s оба начинаются как замороженные, в то время как символы
сохраняют поведение, описанное выше. Итак, ситуация постепенно "улучшается":
приватная константа int WM_APPCOMMAND = 0x319; [DllImport ("user32.dll")]
public static extern IntPtr ... private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int WM_APPCOMMAND = 0x319;
[DllImport("user32.dll")]
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE);