В чем смысл или эффект замораживания символов и чисел в Ruby?

В 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);

Я хотел бы знать, как я могу получить общий уровень / процент громкости, потому что я хочу знать, отключен ли уже звук или нет.

Изменить: в противном случае я хотел бы разделить звук включения / выключения звука, чтобы у меня было две функции - одна для отключения звука и одна для включения.

спасибо

8
задан Fredrik Hedblad 21 November 2010 в 00:36
поделиться