Лямбды, кортежи, вывод типов гонит
От: DarthSidius  
Дата: 26.05.15 05:17
Оценка:
VS 2010, Nemerle 1.2.0.446

using System;
using System.Linq;
using System.Console;

class Asd
{
    public Meth(_param : object) : void
    {
        def клон = MemberwiseClone();
        def свва_мклоны = GetType()
            // Получим св-ва
            .GetProperties()
            // ... и интерфейсы ICloneable
            .Select( свво => (свво, свво.PropertyType.GetInterface("ICloneable")) )
            // ... только те, которые могут быть записаны, у которых есть интерфейс IClonable и значение св-ва не равно null
            .Where( (свво, иклонабле) => иклонабле != null && свво.CanWrite && свво.GetValue(клон, null) != null ) // <- Error
            // Возрат св-в и метода Clone
            .Select( (свво, иклонабле) => (свво, иклонабле.GetMethod("Clone")) )
        ;
    }
}

D:\Work\Nemerle\Test4\Test4\Main.n(16,54): error : there is no member named `CanWrite' in (System.Reflection.PropertyInfo- * ?) with type ?
D:\Work\Nemerle\Test4\Test4\Main.n(16,71): error : there is no member named `GetValue' in (System.Reflection.PropertyInfo- * ?) with type ?
D:\Work\Nemerle\Test4\Test4\Main.n(16,71): error : Cannot implicitly convert type 'bool+' to 'bool'.




Ладно, исправляем, но на вводе квадратной скобки студия мертво вешается.


Ладно, вводим скобки в обратном порядке. Вроде все норм. Но какие-то изменения в рабочем проекте, абсолютно не касающиеся этого кода приводят к следующему:


В выводе точно такая же ошибка — бикоз, двоеточие и пустота...
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re: Лямбды, кортежи, вывод типов гонит
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.15 11:19
Оценка:
Здравствуйте, DarthSidius, Вы писали:

DS>VS 2010, Nemerle 1.2.0.446


DS>
DS>            .Where( (свво, иклонабле) => иклонабле != null && свво.CanWrite && свво.GetValue(клон, null) != DS>


Проблема из-за конфликта кортежных преобразований и перегрузок в линке. Думаю, ее можно обойти явно взяв в скобки параметры:
.Where( ((свво, иклонабле)) => иклонабле != null && свво.CanWrite && свво.GetValue(клон, null) != null ) // <- Error
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Лямбды, кортежи, вывод типов гонит
От: DarthSidius  
Дата: 27.05.15 04:58
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, DarthSidius, Вы писали:


DS>>VS 2010, Nemerle 1.2.0.446


DS>>
DS>>            .Where( (свво, иклонабле) => иклонабле != null && свво.CanWrite && свво.GetValue(клон, null) != DS>


VD>Проблема из-за конфликта кортежных преобразований и перегрузок в линке. Думаю, ее можно обойти явно взяв в скобки параметры:

VD>
VD>.Where( ((свво, иклонабле)) => иклонабле != null && свво.CanWrite && свво.GetValue(клон, null) != null ) // <- Error
VD>


Если бы проблема была только в этом. Я ее обошел объявляя в Where параметр лямбды как одну переменную-кортеж. В исходном сообщении это есть. Но что делать с этим (это тоже есть в исходном сообщении):

Но какие-то изменения в рабочем проекте, абсолютно не касающиеся этого кода приводят к следующему:
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re[3]: Лямбды, кортежи, вывод типов гонит
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.05.15 12:59
Оценка:
Здравствуйте, DarthSidius, Вы писали:

DS>Если бы проблема была только в этом. Я ее обошел объявляя в Where параметр лямбды как одну переменную-кортеж. В исходном сообщении это есть. Но что делать с этим (это тоже есть в исходном сообщении):...


Что-бы что-то сказать, надо наблюдать это явление воочию.

Универсальный совет может быть один. Если что-то выглядит странно, нажми Shift+Alt+R. Это заставит интеграцию пересоздать дерево типов проекта. После того как в статусной строке появится надпись "Build types tree is completed." подведи мышку к этому месту. Возможно это поможет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Лямбды, кортежи, вывод типов гонит
От: DarthSidius  
Дата: 27.05.15 14:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Универсальный совет может быть один. Если что-то выглядит странно, нажми Shift+Alt+R. Это заставит интеграцию пересоздать дерево типов проекта. После того как в статусной строке появится надпись "Build types tree is completed." подведи мышку к этому месту. Возможно это поможет.


Сделал так. Все точно также как описано в предыдущем сообщении.
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re[5]: Лямбды, кортежи, вывод типов гонит
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.05.15 17:21
Оценка:
Здравствуйте, DarthSidius, Вы писали:

DS>Сделал так. Все точно также как описано в предыдущем сообщении.


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