из глубокого цикла нельзя выходить return-ом ??
От: _Claus_  
Дата: 12.04.12 22:54
Оценка:
При сабже получаю ошибку: non local goto (block return?) detected (l10619)

и как на это реагировать — в исью или просто поплакать?
Re: из глубокого цикла нельзя выходить return-ом ??
От: WolfHound  
Дата: 12.04.12 23:01
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>При сабже получаю ошибку: non local goto (block return?) detected (l10619)

_C_>и как на это реагировать — в исью или просто поплакать?
Для начала показать минимальный код воспроизводящий ошибку.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: из глубокого цикла нельзя выходить return-ом ??
От: _Claus_  
Дата: 13.04.12 00:12
Оценка:
WH>Для начала показать минимальный код воспроизводящий ошибку.

к смыслу не стоит придираться — упрощал как мог.

#pragma indent
#pragma warning disable 10005

using Nemerle;
using System
using System.Collections.Generic
using Nemerle.Imperative
using System.Linq
using Nemerle.Linq

namespace xlib
  
  class Объект 
    public suit(g: Объект): bool
      false
  
  class Множество: Объект  
    public элементы: List[Объект]    
  
  class Limit       
      
    public f(obj: Объект, template: IEnumerable[Объект]): bool
       
      def orels = Множество()
      
      foreach(tr in template)
      
        def v = orels.элементы.Any(x => x.suit(tr))
        
        unless (v)
          
          return false
          
      true
Re[3]: из глубокого цикла нельзя выходить return-ом ??
От: catbert  
Дата: 13.04.12 07:51
Оценка:
Здравствуйте, _Claus_, Вы писали:


WH>>Для начала показать минимальный код воспроизводящий ошибку.


_C_>к смыслу не стоит придираться — упрощал как мог.


Да, это древний баг. Добавьте в issues.
Но вам повезло: этого кода вообще не должно быть Используйте просто Enumerable.Contains:

#pragma indent
#pragma warning disable 10005

using Nemerle;
using System
using System.Collections.Generic
using Nemerle.Imperative
using System.Linq
using Nemerle.Linq

namespace xlib
  
  class Объект 
    public suit(g: Объект): bool
      false
  
  class Множество: Объект  
    public элементы: List[Объект]    
  
  class Limit       
      
    public f(obj: Объект, template: IEnumerable[Объект]): bool
       
      def orels = Множество()
      
      template.Contains(tr => orels.элементы.Any(x => x.suit(tr)))


Дисклеймер: писал в браузере, не тестил.

А если все-таки нужен печально известный for-if паттерн, то нужно вместо использования стандартных макросов попробовать именованные блоки.
Re[4]: из глубокого цикла нельзя выходить return-ом ??
От: _Claus_  
Дата: 13.04.12 10:40
Оценка:
C>Да, это древний баг. Добавьте в issues.
C>Но вам повезло: этого кода вообще не должно быть Используйте просто Enumerable.Contains:

Мой код отличается. это пример, написанный только для воспрозведения.

Мне так почти каждый день везет, когда пишу на N .
Re[4]: из глубокого цикла нельзя выходить return-ом ??
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.04.12 20:03
Оценка:
Здравствуйте, catbert, Вы писали:

C>Да, это древний баг. Добавьте в issues.


Не надо дублировать issues. Баг уже починен.

Это типа один из поляков хотел сделать как лучше. Но о последствиях не подумал.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: из глубокого цикла нельзя выходить return-ом ??
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.04.12 20:04
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>При сабже получаю ошибку: non local goto (block return?) detected (l10619)

_C_>и как на это реагировать — в исью или просто поплакать?

Это из-за замыкания. Старый баг. Уже исправлен.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: из глубокого цикла нельзя выходить return-ом ??
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.04.12 23:16
Оценка:
Здравствуйте, _Claus_, Вы писали:

_C_>При сабже получаю ошибку: non local goto (block return?) detected (l10619)


_C_>и как на это реагировать — в исью или просто поплакать?


Это уже исправлено.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.