Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];

Вниз

Почему компилятором неверно обработывается код ?   Найти похожие ветки 

 
infom ©   (2004-12-15 18:51) [0]

AString := qData.Fields[IfThen(1=1,10,20)].DisplayName;


 
DiamondShark ©   (2004-12-15 19:03) [1]

Что такое qData?
Что такое Fields?
Что такое IfThen?


 
jack128 ©   (2004-12-15 19:08) [2]

И что такое "неверно обработывается"?

;-)


 
Суслик ©   (2004-12-15 19:14) [3]


> Что такое IfThen?

сам удивелен был, а такое в delphi есть :))
нажми f1


 
vuk ©   (2004-12-15 19:34) [4]

Я бы вообще к индексам полей не привязывался, а только исключительно к именам...


 
aus   (2004-12-15 19:36) [5]

потому что 1=1 всегда истина, следовательно сразу подставляется результат 10.


 
Verg ©   (2004-12-15 19:48) [6]

ifThen( I=0, 1, B div I );


 
KSergey ©   (2004-12-15 21:02) [7]

> Суслик ©   (15.12.04 19:14) [3]
> > Что такое IfThen?
> сам удивелен был, а такое в delphi есть :)) нажми f1

А в какой версии? В 5- нету...


 
Alx2 ©   (2004-12-15 21:04) [8]

>KSergey ©   (15.12.04 21:02) [7]
в D6 есть это:

Conditionally returns one of two specified values.

Unit

Math
or StrUtils

Category

miscellaneous routines

function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;

function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 = 0): Int64; overload;
function IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double = 0.0): Double; overload;
function IfThen(AValue: Boolean; const ATrue: string; const AFalse: string = ""): string; overload;

Description

IfThen checks the expression passed as AValue and returns ATrue if it evaluates to True, or AFalse if it evaluates to False. If the AFalse parameter is omitted, IfThen returns 0 or an empty string when AValue evaluates to False.


 
infom ©   (2004-12-16 11:04) [9]

DiamondShark ©   (15.12.04 19:03) [1]
qData : TADOQuery ;

aus   (15.12.04 19:36) [5]
1=1 это я для примера вставил, а вообще там выражение


 
infom ©   (2004-12-16 11:08) [10]

самое интересное этот код корректно обрабатывается

var i:integer;
begin

  i:= IfThen(1=1,10,20);
  AString := qData.Fields[i].DisplayName;

end;


а этот нет

  AString := qData.Fields[IfThen(1=1,10,20)].DisplayName;


 
}|{yk ©   (2004-12-16 11:11) [11]

В С++ это стандартная тернарная операция
z=x>y?x:y;


 
DiamondShark ©   (2004-12-16 11:19) [12]

А в чём некорректность-то?


 
Плохиш ©   (2004-12-16 11:22) [13]


infom ©   (16.12.04 11:08) [10]

В Д7 корректно отрабатывается.


 
infom ©   (2004-12-16 11:36) [14]

Ошибка мол : IfThen возвращает тип String


 
Digitman ©   (2004-12-16 13:02) [15]


> infom ©   (16.12.04 11:36) [14]
> Ошибка мол : IfThen возвращает тип String


если так, то значит ты "гонишь" в [9]

ибо метод TDataSet.Fields[n] требует в кач-ве параметра n именно integer-значение, и компилятор гу никак не может сгенерировать иной код нежели код ф-ции

function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;


 
Плохиш ©   (2004-12-16 13:09) [16]


>infom ©   (16.12.04 11:36) [14]
>Ошибка мол : IfThen возвращает тип String

Так я и думал, в справке написано

Unit

Math or StrUtils


 
Igorek ©   (2004-12-16 14:05) [17]

Делов-то - подключить VCL\Source и оттрасировать. (клавиша F7)


 
Digitman ©   (2004-12-16 15:39) [18]


> Igorek ©   (16.12.04 14:05) [17]


> оттрасировать


не царское это дело - "трассировать" ..


 
DiamondShark ©   (2004-12-16 16:23) [19]

Так просто всё.

Функции

function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;
function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 = 0): Int64; overload;
function IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double = 0.0): Double; overload;

в модуле Math, а функция

function IfThen(AValue: Boolean; const ATrue: string; const AFalse: string = ""): string; overload;

в модуле StrUtils.

Если прописать в uses strutils после math, то первые функции будут недоступны.

Написать:
AString := qData.Fields[Math.IfThen(1=1,10,20)].DisplayName;


 
DiamondShark ©   (2004-12-16 17:17) [20]

Хм... Интересно.
После ответа ветка не поднялась...


 
Плохиш ©   (2004-12-16 17:25) [21]


>DiamondShark ©   (16.12.04 16:23) [19]
>Если прописать в uses strutils после math, то первые функции будут недоступны.

Дафай нэ будем.


 
Cosinus ©   (2004-12-16 18:02) [22]

Хм. У меня похожая ситуация была с какой то из функций при подключении AsyncPro. Я решал ее так : вместо SomeVar:=SomeFunction; я писал SomeVar:=System.SomeFunction; явно указывая на модуль, из которого она вызывается. Может в твоем случае прокатит что то вроде AString := qData.Fields[Math.IfThen(1=1,10,20)].DisplayName;. Могу ошибаться, так что прошу сильно не пинать... :)


 
Cosinus ©   (2004-12-16 18:03) [23]

Млин... Прошу прощения, я не видел
> DiamondShark ©   (16.12.04 16:23) [19]



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.036 c
14-1103725095
oldman
2004-12-22 17:18
2005.01.09
Господа модераторы!


14-1103446927
AlterEgo of WondeRu
2004-12-19 12:02
2005.01.09
ОТО. Черные и белые дыры...


14-1103215583
}|{yk
2004-12-16 19:46
2005.01.09
Как из формата djvu "выдрать" картинки?


4-1101073459
Tack
2004-11-22 00:44
2005.01.09
Получить состояния клавиш Ctrl, Alt, Shift


14-1103595244
Чеширский_Кот
2004-12-21 05:14
2005.01.09
ФИФА признала Роналдиньо лучшим футболистом-2004





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский