Текущий архив: 2011.05.22;
Скачать: CL | DM;
Вниз
как правильно описать функцию с разными выходами? Найти похожие ветки
← →
novai (2011-02-11 18:18) [0]как правильно описать функцию? хочу так:
function WhatButtonOn(AX, AY: integer): string;
function WhatButtonOn(AX, AY: integer): integer;
не получается, пока сделал так:
function WhatButtonOn(AX, AY: integer): string; overload;
function WhatButtonOn(AX, AY: Smallint): Smallint; overload;
но не думаю, что это правильно, как правильно, или это не возможно?
← →
И. Павел © (2011-02-11 18:20) [1]А как вы собираетесь потом вызывать две одноименные функции с одинаковыми параметрами? :)
← →
Palladin © (2011-02-11 18:24) [2]procedure WhatButtonOn(AX, AY: integer; var r: String); overload;
procedure WhatButtonOn(AX, AY: integer; var r: integer); overload;
← →
novai (2011-02-11 18:27) [3]думал компилятор сам решит когда что:
if WhatButtonOn(AX, AY: integer): = "блабла" then
или
if WhatButtonOn(AX, AY: integer): = 1 then
← →
novai (2011-02-11 18:28) [4]Палладин, значит функцией нельзя?
← →
И. Павел © (2011-02-11 18:39) [5]
> думал компилятор сам решит когда что:
Компилятор принимает такие решения на основе сигнатуры функции (это ее имя, типы передаваемых параметров и т.д.). Оператор "=", который к функции даже не относится, не может входить в ее сигнатуру.
← →
Palladin © (2011-02-11 18:39) [6]Тебе справку процитировать или сам в нее посмотришь?
← →
И. Павел © (2011-02-11 18:40) [7]
> не может входить в ее сигнатуру.
А жаль. Из за жесткой типизация такая перегрузка могла бы стать фишкой паскаля :)
← →
novai (2011-02-11 18:42) [8]
> Тебе справку процитировать
а что там именно? не понял о чем Вы?
← →
sniknik © (2011-02-11 18:43) [9]> функцией нельзя?
можно, разрешаю... хотя я не Palladin :(.
function WhatButtonOn(AX, AY: integer; const r: String): String; overload;
function WhatButtonOn(AX, AY: integer; r: integer): integer; overload;
← →
Palladin © (2011-02-11 18:44) [10]ну прежде чем на форум лезть неплохо было бы почитать справку по overload, не так ли? ведь только эта директива позволяет объявлять одноименные функции/процедуры/методы
← →
sniknik © (2011-02-11 18:44) [11]> такая перегрузка могла бы стать фишкой паскаля :)
с довеском в виде источника багов... т.к. добавляет неоднозначность.
← →
Palladin © (2011-02-11 18:44) [12]
> sniknik © (11.02.11 18:43) [9]
а я и не запрещал )
← →
novai (2011-02-11 18:44) [13]
> function WhatButtonOn(AX, AY: integer; const r: String):
> String; overload;
> function WhatButtonOn(AX, AY: integer; r: integer): integer;
> overload;
так не интересно, лучше тогда процедурой... все понял, палладин отдельное спасибо
← →
novai (2011-02-11 18:46) [14]справку я посмотрел
увидел:
function Divide(X, Y: Real): Real; overload;
begin
Result := X/Y;
end;
function Divide(X, Y: Integer): Integer; overload;
begin
Result := X div Y;
end;
и не обратил внимания на разные типы параметров( еще раз - спасибо!
← →
novai (2011-02-11 18:51) [15]и всетаки можно сделать так:
function WhatButtonOn(AX, AY: integer): string; overload;
function WhatButtonOn(AX, AY: Smallint): Smallint; overload;
если Ax и АY гарантированно не выйдут за пределы smallint?
← →
novai (2011-02-11 19:09) [16]и ax и ay я всегда перед вызовом буду приводить к Smallint?
← →
sniknik © (2011-02-11 19:09) [17]> и всетаки можно сделать так:
ну, я как опять не возражаю... делай!
p.s.
i:= WhatButtonOn(1, 2);
что вызовется?
← →
Anatoly Podgoretsky © (2011-02-11 19:13) [18]> novai (11.02.2011 18:18:00) [0]
Сам синтаксис правильный, а вот функции нет, это неодназначно, скажи какого
типа параметр 123? Параметры должны быть разными по типу и одназначными.
← →
Anatoly Podgoretsky © (2011-02-11 19:14) [19]> novai (11.02.2011 18:27:03) [3]
С чего бы, например
можно написать так S := func и просто func
← →
Anatoly Podgoretsky © (2011-02-11 19:17) [20]> Palladin (11.02.2011 18:44:12) [12]
А кто? Франк Борланд?
← →
Anatoly Podgoretsky © (2011-02-11 19:18) [21]> novai (11.02.2011 18:51:15) [15]
Опять не одназначные параметры
← →
novai (2011-02-11 21:03) [22]
> i:= WhatButtonOn(1, 2);
> что вызовется?
думал в замисимоcти от вызова вызовет s или i
> какого
> типа параметр 123
не понял, интегер или шортинт?
> Опять не одназначные параметры
да но с приведением, станут похожи если вызывать с приведением типа:
var
sX, sY: integer;
..
function WhatButtonOn(Smallint(sy), Smallint(sy)): Smallint; overload;
← →
novai (2011-02-11 21:04) [23]
> > i:= WhatButtonOn(1, 2);
> > что вызовется?
>
> думал в замисимоcти от вызова вызовет s или i
те в местах вызова буду вызвать с нужным типом s или i...
← →
И. Павел © (2011-02-11 21:05) [24]
> function WhatButtonOn(Smallint(sy), Smallint(sy)): Smallint;
> overload;
Но ведь такой громоздкий вызов функции сведет на нет все удобства перегрузки. ИМХО, легче уж разные имена использовать...
← →
novai (2011-02-11 21:08) [25]
> можно написать так S := func и просто func
не понял о чем речь...
ведь во втором случае мы теряем резулт( а мне не зачем его терять, тем более, хотелось бы, чтоб он было разного типа при одинаковых параметрах функции
← →
novai (2011-02-11 21:11) [26]
> сведет на нет все удобства перегрузки
можно на пальцах, что есть перезагрузка?
просто мне удобно вызывать функцию в разных местах программы с одинаковыми входными параметрами, но разными выходными...
← →
И. Павел © (2011-02-11 22:03) [27]
> можно на пальцах, что есть перезагрузка?
http://256bit.ru/Delphi7/Glava1/Index9.html (обратите внимание: "Перегрузка методов нужна, чтобы произвести одинаковые или похожие действия с разнотипными данными.")
И еще: как прикажете компилятору обработать вот такое выражение:if WhatButtonOn(1, 1) = WhatButtonOn(2, 2)
← →
sniknik © (2011-02-11 22:14) [28]> просто мне удобно вызывать функцию в разных местах программы с одинаковыми входными параметрами, но разными выходными...
это тебе только кажется, что удобно... вот представь, что ВСЕ функции в дельфи имеют одно название... кошмар какой, у тебя тот же кошмар только маленький, на 2х функциях незаметный. причем перекрывающийся из-за лени, неприятностью запоминать 2 слова вместо одного. но если подумать...
← →
Anatoly Podgoretsky © (2011-02-12 10:21) [29]> novai (11.02.2011 21:08:25) [25]
Какая разница, что мы делаем с результатом, вопрос что вызывать?
Или так proc1(func1(1, 2))
Учись мыслить шире
← →
Anatoly Podgoretsky © (2011-02-12 10:23) [30]> novai (11.02.2011 21:11:26) [26]
А где речь про перезагрузку, про что спрашиваешь, с какой целью, в каком
контексте, может ты Матрицу хочешь перезагрузить, или компьютер, или
программу, для функций это не применимо, а если и применимо, то это уже
рекурсия.
← →
Anatoly Podgoretsky © (2011-02-12 10:25) [31]> novai (11.02.2011 21:11:26) [26]
Я бы повесился, вот к чему приводит гонка за лидером. Не все что дозволено
Микрософту, хорошо для других
Страницы: 1 вся ветка
Текущий архив: 2011.05.22;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.01 c