Запутался в немерле match
От: chudo19  
Дата: 07.09.06 08:17
Оценка:

def prop : PropertyInfo    =....

match(prop){
  теперь в зависимости от prop.PropertyInfo нужно совершать разные действия 
}

да и как в общем случае делать match для классов в зависимости от их мемберов?
есть ли синтаксис такой же как для variants "where (class_prop = value)" ?

я расматривал match помимо всего ,как общую замену if и switch а вот теперь начинаю сомневатся

30.01.07 18:18: Перенесено модератором из 'Декларативное программирование' — IT
Re: Запутался в немерле match
От: ie Россия http://ziez.blogspot.com/
Дата: 07.09.06 08:58
Оценка:
Здравствуйте, chudo19, Вы писали:

C>
C>def prop : PropertyInfo    =....

C>match(prop){
C>  теперь в зависимости от prop.PropertyInfo нужно совершать разные действия 
C>}
C>

C>да и как в общем случае делать match для классов в зависимости от их мемберов?
C>есть ли синтаксис такой же как для variants "where (class_prop = value)" ?

Хмм... У тебя prop имеет тип PropertyInfo, но класс PropertyInfo не имеет свойства PropertyInfo.

C>я расматривал match помимо всего ,как общую замену if и switch а вот теперь начинаю сомневатся


Напиши аналог на if-ах или switch.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[2]: Запутался в немерле match
От: chudo19  
Дата: 07.09.06 09:02
Оценка:
Здравствуйте, ie, Вы писали:

ie>Хмм... У тебя prop имеет тип PropertyInfo, но класс PropertyInfo не имеет свойства PropertyInfo.


опечатка — PropertyType



ie>Напиши аналог на if-ах или switch.


хотелось бы покрасивше зделать
Re[3]: Запутался в немерле match
От: ie Россия http://ziez.blogspot.com/
Дата: 07.09.06 09:37
Оценка:
Здравствуйте, chudo19, Вы писали:

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


ie>>Хмм... У тебя prop имеет тип PropertyInfo, но класс PropertyInfo не имеет свойства PropertyInfo.


C>опечатка — PropertyType


match (prop.Name)
    | "String" => ...
    | "Int32" => ...
    | "DateTime" => ...
    | _ => ...

?

Кстати, такой код мне не удалось заставить работать:
match (prop)
    | typeof (string) => ...
    | typeof (int) => ...
    | typeof (DateTime) => ...
    | _ => ...




ie>>Напиши аналог на if-ах или switch.


C>хотелось бы покрасивше зделать


Я имел ввиду, хотелось бы на примере if-ов понять, что ты хочешь, чтоб сдалать аналог на N.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[3]: Запутался в немерле match
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.09.06 10:57
Оценка:
Здравствуйте, chudo19, Вы писали:

ie>>Напиши аналог на if-ах или switch.


C>хотелось бы покрасивше зделать


Он тебя просит написать вариант того кода который ты хочешь получить на if-ах, чтобы потом переписать его на match-е.

Я лично тоже не понял смысла задачи.

Я попробую ответить на вопрос, но не факт что я догадался правильно.

В match можно делать дополнительны проверки. Например:
class A
{
    publib Prop1 : int { get { 0 } }
}
class B : A
{
    publib Prop2 : int { get { 2 } }
}

def var : A = B();

match (var)
{
    | x is B when x.Prop2 == 2 => ...
    | x is B when x.Prop2 == 0 => ...
    | x is B                   => ...
    | _                        => // иначе...
}

Вообще различные варианты применения match-я описанны в нашей вводной статье.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Запутался в немерле match
От: chudo19  
Дата: 07.09.06 12:34
Оценка:
Здравствуйте, ie, Вы писали:


ie>Кстати, такой код мне не удалось заставить работать:

ie>
ie>match (prop)
ie>    | typeof (string) => ...
ie>    | typeof (int) => ...
ie>    | typeof (DateTime) => ...
ie>    | _ => ...
ie>


Собсно это и хотел.
Re[5]: Запутался в немерле match
От: chudo19  
Дата: 07.09.06 12:45
Оценка:
Всем спасибо за отзывчивость
С типами решается естественно так

 match(typeof(float)){
        | t : System.Type when t.Equals(typeof(int)) => ...
        | t : System.Type when t.Equals(typeof(float)) => ...            
        |_ => ...
    }


проблема была в том что я писал не when а where как для вариантов.
вообще не знал что здесь when можно использовать , в их хелпе нету вроде этого.
а про русский забыл
Re[6]: Запутался в немерле match
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.09.06 19:54
Оценка:
Здравствуйте, chudo19, Вы писали:

C>проблема была в том что я писал не when а where как для вариантов.

C>вообще не знал что здесь when можно использовать , в их хелпе нету вроде этого.

Есть. Guards называется.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Запутался в немерле match
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.09.06 19:54
Оценка:
Здравствуйте, chudo19, Вы писали:

C>
C> match(typeof(float)){
C>        | t : System.Type when t.Equals(typeof(int)) => ...
C>        | t : System.Type when t.Equals(typeof(float)) => ...            
C>        |_ => ...
C>    }
C>


А зачем типы указывать? Достаточно и так?
using System.Console;

 match(typeof(float))
 {
  | t when t.Equals(typeof(int)) => WriteLine("int")
  | t when t.Equals(typeof(float)) => WriteLine("float")
  | _ => WriteLine("?")
}
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.