LINUX.ORG.RU

Ответ на: комментарий от Shapeshifter

а почему эта closure в emacs'е не работает? В clisp'е работает, а в emacs'е не работает, жалуется на is_on :-\

uj2 ★★★
()
Ответ на: комментарий от uj2

> а почему эта closure в emacs'е не работает?

Потому что elisp - язык с dynamic binding. Программа:

(let ((a 1))
   (let ((f (lambda () (print a))))
      (let ((a 2))
         (funcall f))))

выдаст 2.

hbee ★★★★
()

> void func() {

> static bool is_on=false;

> if(is_on==true)

> {func_on();is_on=true;}

> else

> {func_off();is_on=false;} }

почему просто не

void func() { func_off(); }

?

в таком случае зачем _вообще_ нужна эта функция если есть func_off ?

lg ★★
()

2lg

>void func() {
>  static bool is_on=false;
>  if(is_on==true)
>    {func_on();is_on=true;}
>  else
>    {func_off();is_on=false;} }

lg, я думаю, что аффтар ;) имел в виду такой кодЖ

void func() 
{
  static bool is_on = false;

  if(is_on==false) {func_on(); is_on = true;}
  else {func_off(); is_on=false;} 
}

просто перепутал, наверное. Типа, сначала выключено, но тогда включить. А когда включено, то выключить. Как кнопку: отжал зажал и т.д.

atoku ★★★
()
Ответ на: 2lg от atoku

Только вообще, зачем это is_on==false??? It should be (!is_on) или вообще переставить местами.

atoku ★★★
()
Ответ на: 2lg от atoku

А по-хорошему, лучше, видимо так:

void func() 
{
  static bool is_on = false;

  is_on ? func_off() : func_on();
  is_on = !is_on;
}

atoku ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.