def prop : PropertyInfo =....
match(prop){
теперь в зависимости от prop.PropertyInfo нужно совершать разные действия
}
да и как в общем случае делать match для классов в зависимости от их мемберов?
есть ли синтаксис такой же как для variants "where (class_prop = value)" ?
я расматривал match помимо всего ,как общую замену if и switch а вот теперь начинаю сомневатся
30.01.07 18:18: Перенесено модератором из 'Декларативное программирование' — IT
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 а вот теперь начинаю сомневатся
Здравствуйте, chudo19, Вы писали:
C>Здравствуйте, ie, Вы писали:
ie>>Хмм... У тебя prop имеет тип PropertyInfo, но класс PropertyInfo не имеет свойства PropertyInfo.
C>опечатка — PropertyType
Здравствуйте, 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Всем спасибо за отзывчивость
С типами решается естественно так
match(typeof(float)){
| t : System.Type when t.Equals(typeof(int)) => ...
| t : System.Type when t.Equals(typeof(float)) => ...
|_ => ...
}
проблема была в том что я писал не when а where как для вариантов.
вообще не знал что здесь when можно использовать , в их хелпе нету вроде этого.
а про русский забыл
Здравствуйте, chudo19, Вы писали:
C>проблема была в том что я писал не when а where как для вариантов. C>вообще не знал что здесь when можно использовать , в их хелпе нету вроде этого.
Есть. Guards называется.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.