ພາສາອັງກິດພາສາຝຣັ່ງແອສປາໂຍນ

OnWorks favicon

prima-gencls - ອອນລາຍໃນຄລາວ

ເປີດໃຊ້ prima-gencls ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີຜ່ານ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ນີ້ແມ່ນຄໍາສັ່ງ prima-gencls ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


gencls - class interface compiler ສໍາລັບໂມດູນຫຼັກ Prima

ສະຫຼຸບສັງລວມ


gencls --h --inc --tml -O -I --depend --sayparent filename.cls

ລາຍລະອຽດ


ສ້າງສ່ວນຫົວດ້ວຍ C macro ແລະໂຄງສ້າງສໍາລັບການກໍານົດວັດຖຸໂມດູນຫຼັກ Prima.

ການໂຕ້ຖຽງ


gencls ຍອມຮັບການໂຕ້ຖຽງຕໍ່ໄປນີ້:

--h ສ້າງໄຟລ໌ .h (ມີຄໍາປະກາດທີ່ຈະລວມຢູ່ໃນຫນຶ່ງຫຼືຫຼາຍໄຟລ໌)

--inc
ສ້າງໄຟລ໌ .inc (ດ້ວຍການປະກາດທີ່ຈະລວມຢູ່ໃນໄຟລ໌ເທົ່ານັ້ນ)

-O ເປີດການປັບແຕ່ງສູດການຄິດໄລ່ສໍາລັບໄຟລ໌ .inc. ສູດການຄິດໄລ່ແມ່ນອີງໃສ່ສົມມຸດຕິຖານ,
ວ່າບາງຫນ້າທີ່ຖືກປະກາດຄືກັນ, ດັ່ງນັ້ນຊິ້ນສ່ວນລະຫັດທີ່ຈັດການກັບ
ພາລາມິເຕີແລະການແປງຜົນໄດ້ຮັບສາມາດແບ່ງປັນໄດ້. ດ້ວຍທຸງ "-O" ຢູ່ເທິງ, ຮ່າງຂອບແມ່ນ
ແທນທີ່ການໂທຫາຟັງຊັນ, ຊື່ທີ່ສ້າງຂຶ້ນຈາກຕົວກໍານົດວິທີການທັງຫມົດ
ຜົນບວກ. ຟັງຊັນຕົວຈິງບໍ່ໄດ້ຂຽນໄວ້ໃນໄຟລ໌ .inc, ແຕ່ຢູ່ໃນໄຟລ໌ .tml. ທັງໝົດ
ການປະກາດຊໍ້າກັນຈາກຊຸດຂອງໄຟລ໌ .tml ສາມາດເອົາອອກໄດ້ ແລະການແຈ້ງເຕືອນ
ຂຽນໃສ່ໄຟລ໌ຫນຶ່ງໂດຍ tmlink utility.

--tml
ສ້າງໄຟລ໌ .tml. ເປີດ "-O" ອັດຕະໂນມັດ.

- ຊື່
ເພີ່ມໄດເລກະທໍລີໃສ່ເສັ້ນທາງຄົ້ນຫາ, ບ່ອນທີ່ຜົນປະໂຫຍດຄົ້ນຫາໄຟລ໌ .cls. ສາມາດເປັນ
ລະບຸຫຼາຍຄັ້ງ.

-- ຂຶ້ນ​ກັບ​
ພິມອອກຄວາມເພິ່ງພາອາໄສຂອງໄຟລ໌ທີ່ໃຫ້.

--sayparent
ພິມພໍ່ແມ່ຂອງຊັ້ນຮຽນພາຍໃນໄຟລ໌ທີ່ໃຫ້ໄວ້.

SYNTAX


ໃນສັ້ນ, syntax ຂອງໄຟລ໌ .cls ສາມາດຖືກອະທິບາຍໂດຍໂຄງການຕໍ່ໄປນີ້:

[ການປະກາດປະເພດສູນ ຫຼືຫຼາຍກວ່ານັ້ນ]
[ການປະກາດສູນ ຫຼືໜຶ່ງຊັ້ນ]

Gencls ຜະລິດໄຟລ໌ .h, .inc ຫຼື .tml, ດ້ວຍຊື່ພື້ນຖານຂອງໄຟລ໌ .cls, ຖ້າບໍ່ມີວັດຖຸ ຫຼື
ຊື່ແພັກເກັດທີ່ໃຫ້, ຫຼືດ້ວຍຊື່ຂອງວັດຖຸ ຫຼືແພັກເກດນັ້ນ.

ພື້ນຖານ ຜິວ ໜັງ ຂໍ້ມູນ ປະເພດ
Gencls ມີຫຼາຍປະເພດຂໍ້ມູນ scalar ທີ່ສ້າງຂຶ້ນໃນ, ທີ່ມັນຮູ້ວິທີການຈັດການກັບ. ເພື່ອ 'ຈັດການກັບ'
ຫມາຍຄວາມວ່າມັນສາມາດສ້າງລະຫັດທີ່ໂອນຂໍ້ມູນຂອງປະເພດເຫຼົ່ານີ້ລະຫວ່າງ C ແລະ perl,
ການ​ນໍາ​ໃຊ້ XS (ເບິ່ງ perlguts ) ການ​ໂຕ້​ຕອບ​ຫ້ອງ​ສະ​ຫມຸດ​.

ປະ​ເພດ​ແມ່ນ​:

int
ບູລ
ຈັດການ
double
SV*
HV*
char *
string ( C declaration is char[256] )

ຍັງມີບາງປະເພດທີ່ມາຈາກການກໍ່ສ້າງ, ເຊິ່ງແມ່ນ

ຍາວ
ສັ້ນ
char
ສີ
U8

ທີ່ຖືກແຜນທີ່ກັບ int. ຂໍ້ມູນບໍ່ໄດ້ຮັບການປ່ຽນເປັນ int ໃນຂະບວນການໂອນ, ແຕ່ມັນ
ຖືກເກັບໄວ້ແທນ perl scalar ໂດຍໃຊ້ newSViv() ຟັງຊັນ, ເຊິ່ງ, ໃນທາງກັບກັນ, ອາດຈະສູນເສຍ bits
ຫຼືເຄື່ອງຫມາຍ.

ມາຈາກ ຂໍ້ມູນ ປະເພດ
syntax ສໍາລັບຄໍານິຍາມປະເພດຂໍ້ມູນໃຫມ່ມີດັ່ງນີ້:



ຂອບເຂດສາມາດເປັນຫນຶ່ງໃນສອງ pragmas, "ທົ່ວໂລກ" ຫຼື "ທ້ອງຖິ່ນ". ພວກເຂົາເຈົ້າຊີ້ໃຫ້ເຫັນເຖິງການນໍາໃຊ້ຂໍ້ມູນໃຫມ່
ປະເພດ, ບໍ່ວ່າຈະເປັນປະເພດຈະຖືກນໍາໃຊ້ພຽງແຕ່ສໍາລັບຫນຶ່ງຫຼືຫຼາຍວັດຖຸ. ການນໍາໃຊ້ "ທ້ອງຖິ່ນ" ແມ່ນ
ຂ້ອນຂ້າງຄ້າຍຄືກັບ C pragma static. ໃນປັດຈຸບັນຄວາມແຕກຕ່າງພຽງແຕ່ແມ່ນຫນ້າທີ່
ການນໍາໃຊ້ປະເພດທ້ອງຖິ່ນທີ່ສັບສົນໃນບັນຊີລາຍຊື່ພາລາມິເຕີຫຼືຜົນໄດ້ຮັບບໍ່ແມ່ນຫົວຂໍ້ສໍາລັບ
ການເພີ່ມປະສິດທິພາບ "-O".

ສະເກລາ ປະເພດ
ປະເພດ scalar ໃໝ່ ອາດຈະພຽງແຕ່ເປັນນາມແຝງກັບອັນທີ່ມີຢູ່ແລ້ວເທົ່ານັ້ນ, ຕົ້ນຕໍແມ່ນສໍາລັບການເຂົ້າລະຫັດ C
ຄວາມສະດວກສະບາຍ. ປະເພດຂອງ scalar ສາມາດຖືກກໍານົດໃນສອງວິທີ:

ນາມແຝງໂດຍກົງ
Syntax:

$id => ;

ຕົວຢ່າງ:

ທົ່ວໂລກ $Handle => int;

ID ປະເພດໃໝ່ຈະບໍ່ປາກົດຢູ່ໃນໄຟລ໌ C, ແຕ່ປະເພດຈະຖືກປ່ຽນແທນ
ໄຟລ໌ .cls ທັງໝົດທີ່ປະກອບມີຄໍານິຍາມນີ້.

C ມະຫາພາກ
Syntax:

id1 id2

ຕົວຢ່າງ:

API_HANDLE UV

ລະຫັດດັ່ງກ່າວສ້າງຄໍານິຍາມ C macro ໃນໄຟລ໌ header .h ໃນຮູບແບບ

#ກຳນົດ id1 id2

C macro ທີ່ມີພາລາມິເຕີແມ່ນບໍ່ອະນຸຍາດໃຫ້. id1 ແລະ id2 ບໍ່ຈໍາເປັນຕ້ອງມີຢູ່
ໃນຊ່ອງຊື່ .cls, ແລະບໍ່ມີການປ່ຽນແທນໃນລະຫວ່າງການປະມວນຜົນໄຟລ໌ .cls. ນີ້
ການນໍາໃຊ້ pragma ແມ່ນຈໍາກັດຫຼາຍ.

ສະລັບສັບຊ້ອນ ປະເພດ
ປະເພດຂໍ້ມູນທີ່ຊັບຊ້ອນສາມາດເປັນ arrays, structs ແລະ hashes. ພວກເຂົາສາມາດເປັນການປະສົມປະສານຫຼືເປັນ
vector ຂອງ scalar (ແຕ່ບໍ່ຊັບຊ້ອນ) ປະເພດຂໍ້ມູນ.

Gencls ອະນຸຍາດໃຫ້ປະສົມປະສານຫຼາຍປະເພດຂອງຂໍ້ມູນສະລັບສັບຊ້ອນທີ່ພາສາ C ບໍ່ໄດ້
ຮັບຮູ້. ສິ່ງເຫຼົ່ານີ້ຈະຖືກອະທິບາຍຂ້າງລຸ່ມນີ້.

ປະເພດຂໍ້ມູນທີ່ຊັບຊ້ອນບໍ່ໄດ້ຮັບການນໍາເຂົ້າເຂົ້າໄປໃນລະຫັດ perl. ໂປລແກລມ perl ຕ້ອງປະຕິບັດຕາມ
ປະເພດຂໍ້ມູນທີ່ໃຊ້ໃນເວລາຖ່າຍທອດພາລາມິເຕີໄປຫາຟັງຊັນ.

ອາເລ
Syntax:

@id [ຂະຫນາດ];

ຕົວຢ່າງ:

ທົ່ວໂລກ @FillPattern U8[8];

ຕົວຢ່າງຂອງຟັງຊັນທີ່ໃຊ້ arrays:

Array * func( Array a1, Array * a2);

ລະຫັດ Perl:

@ret = func(@array1, @array2);

ໃຫ້ສັງເກດວ່າການອ້າງອິງ array ບໍ່ໄດ້ຖືກນໍາໃຊ້, ແລະຈໍານວນຂອງລາຍການໃນ array ທັງຫມົດ
ພາລາມິເຕີຈະຕ້ອງກົງກັບຂະຫນາດຂອງອາເຣ.

ຫມາຍເຫດ: ການປະກາດຕໍ່ໄປນີ້ຈະບໍ່ລວບລວມກັບ C compiler, ເພາະວ່າ C ບໍ່ສາມາດກັບຄືນ
arrays. ຢ່າງໃດກໍຕາມ, ມັນບໍ່ໄດ້ຖືກປະຕິບັດເປັນຄວາມຜິດພາດໂດຍ gencls:

array func();

ໂຄງສ້າງ
Syntax:

@id {
;
...
;
};

ຕົວຢ່າງ:

ທົ່ວໂລກ @Struc {
int ຈໍານວນ;
string id;
}

ຕົວຢ່າງຂອງຟັງຊັນທີ່ໃຊ້ໂຄງສ້າງ:

Struc * func1( Struc a1, Struc * a2);
Struc func2( Struc a1, Struc * a2);

ລະຫັດ Perl:

@ret = func1( @struc1, @struc2);
@ret = func2( @struc1, @struc2);

ໃຫ້ສັງເກດວ່າການອ້າງອິງ array ບໍ່ໄດ້ຖືກນໍາໃຊ້, ແລະທັງຈໍານວນແລະຄໍາສັ່ງຂອງລາຍການທັງຫມົດ
ຕົວກໍານົດການ array ຕ້ອງໄດ້ຮັບການກໍານົດຢ່າງແນ່ນອນວ່າຂະຫນາດແລະຄໍາສັ່ງຂອງໂຄງສ້າງ. ໂຄງສ້າງ
ຊື່ພາກສະຫນາມບໍ່ໄດ້ຖືກນໍາໃຊ້ໃນລະຫັດ perl ເຊັ່ນກັນ.

hashes
Syntax:

%id {
;
...
;
};

ຕົວຢ່າງ:

ທົ່ວໂລກ %Hash {
int ຈໍານວນ;
string id;
}

ຕົວຢ່າງຂອງຟັງຊັນທີ່ໃຊ້ hashes:

Hash * func1(Hash a1, Hash * a2);
Hash func2(Hash a1, Hash * a2);

ລະຫັດ Perl:

%ret = %{func1(\%hash1, \%hash2)};
%ret = %{func2(\%hash1, \%hash2)};

ໃຫ້ສັງເກດວ່າພຽງແຕ່ການອ້າງອິງ hash ຖືກນໍາໃຊ້ແລະສົ່ງຄືນ. ເມື່ອ hash ຜ່ານຈາກ perl
ລະຫັດມັນອາດຈະມີບາງຊ່ອງຂໍ້ມູນ ຫຼືທັງໝົດບໍ່ໄດ້ຕັ້ງ. ໂຄງສ້າງ C ແມ່ນເຕັມໄປແລະສົ່ງໄປຫາ a
ຟັງຊັນ C, ແລະຊ່ອງຂໍ້ມູນທີ່ບໍ່ໄດ້ຕັ້ງຄ່າຖືກມອບໝາຍໃຫ້ກົງກັນ
ຄ່າ C_TYPE_UNDEF, ເຊິ່ງ TYPE ແມ່ນໜຶ່ງໃນ NUMERIC, STRING ແລະ POINTER ຕົວໜັງສື.

ການແປງຄືນບໍ່ໄດ້ນັບຢູ່ໃນຄ່າເຫຼົ່ານີ້ ແລະສົ່ງຄືນທຸກປຸ່ມ hash ດ້ວຍ a
ຄູ່ທີ່ສອດຄ້ອງກັນ.

Namespace ສ່ວນ
Syntax:

{

...

}

ໄຟລ໌ .cls ສາມາດມີສູນ ຫຼືຫນຶ່ງສ່ວນ namespace, ເຕັມໄປດ້ວຍຄໍາອະທິບາຍຟັງຊັນ.
ຟັງຊັນທີ່ອະທິບາຍໄວ້ໃນນີ້ຈະຖືກສົ່ງອອກໄປໃສ່ ID ທີ່ໃຫ້ໃນລະຫວ່າງການລະຫັດເບື້ອງຕົ້ນ. ກ
namespace ສາມາດເປັນ "object" ຫຼື "package".

syntax namespace ຂອງແພັກເກັດອະນຸຍາດໃຫ້ພຽງແຕ່ການປະກາດຫນ້າທີ່ພາຍໃນ "package" ເທົ່ານັ້ນ
block.

ຊຸດ {

...
}

syntax namespace ຂອງວັດຖຸປະກອບມີຕົວແປແລະຄຸນສົມບັດເຊັ່ນດຽວກັນກັບຫນ້າທີ່ (
ເອີ້ນວ່າວິທີການໃນ syntax ຂອງວັດຖຸ). syntax namespace ຂອງວັດຖຸທົ່ວໄປແມ່ນ

ວັດຖຸ [( ID ຫ້ອງຮຽນພໍ່ແມ່)] {



}

ພາຍໃນ namespace ຂອງວັດຖຸ, syntax ມໍລະດົກສາມາດຖືກນໍາໃຊ້:

ວັດຖຸ ( ) { ... }

ຫຼືຄໍາອະທິບາຍວັດຖຸຮາກເປົ່າ (ບໍ່ມີບັນພະບຸລຸດ)

ວັດຖຸ { ... }

ສໍາລັບການປະກາດຊັ້ນວັດຖຸ.

ຫນ້າທີ່
Syntax:

[ ] ( ) [ => ];

ຕົວຢ່າງ:

int package_func1( int a, int b = 1) => c_func_2;
ຈຸດ package_func2( Struc * x, ... );
method void object_func3(HV * profile);

ຄຳນຳໜ້າແມ່ນໃຊ້ກັບຟັງຊັນວັດຖຸ (ວິທີການ) ເທົ່ານັ້ນ. ເພີ່ມເຕີມກ່ຽວກັບຄໍານໍາຫນ້າໃນ Methods
ສ່ວນ.

ຟັງຊັນສາມາດສົ່ງຄືນບໍ່ມີຫຍັງ (void), scalar (int, string, ແລະອື່ນໆ) ຫຼືສະລັບສັບຊ້ອນ (
array, hash) ປະເພດ. ມັນສາມາດຍອມຮັບຕົວກໍານົດການສະເກັດເງິນແລະສະລັບສັບຊ້ອນ, ດ້ວຍປະເພດ
ການປ່ຽນໃຈເຫລື້ອມໃສທີ່ສອດຄ້ອງກັບກົດລະບຽບທີ່ອະທິບາຍຂ້າງເທິງໃນ "ປະເພດຂໍ້ມູນສະເກັດເງິນພື້ນຖານ"
ສ່ວນ.

ຖ້າຟັງຊັນມີພາລາມິເຕີ ແລະ/ຫຼືຜົນຂອງປະເພດທີ່ບໍ່ສາມາດປ່ຽນໄດ້
ອັດຕະໂນມັດລະຫວ່າງ C ແລະ perl, ມັນໄດ້ຮັບການປະກາດແຕ່ບໍ່ໄດ້ເປີດເຜີຍກັບ perl namespace. ໄດ້
ການເຕືອນໄພທີ່ສອດຄ້ອງກັນແມ່ນອອກ. ມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະໃຊ້ syntax gencls ເພື່ອປະກາດ a
ເຮັດວຽກກັບພາລາມິເຕີທີ່ກໍາຫນົດເອງຫຼືຂໍ້ມູນຜົນໄດ້ຮັບ. ສໍາລັບຈຸດປະສົງດັ່ງກ່າວ, C
ການປະກາດລະຫັດພ້ອມກັບການໂທ "newXS" ຕ້ອງເຮັດ.

ຕົວຢ່າງ: ellipsis (...) ບໍ່ສາມາດປ່ຽນໄດ້ໂດຍ gencls, ແນວໃດກໍ່ຕາມມັນເປັນ C
ການກໍ່ສ້າງ.

ຈຸດ package_func2( Struc * x, ... );

syntax ຂອງຟັງຊັນມີການເພີ່ມຄວາມສະດວກຫຼາຍຢ່າງ:

ຄ່າພາຣາມິເຕີເລີ່ມຕົ້ນ
ຕົວຢ່າງ:

void func(int a = 15);

ຟັງຊັນທີ່ປະກາດໃນແບບນັ້ນສາມາດເອີ້ນໄດ້ທັງ 0 ຫຼື 1 ພາລາມິເຕີ. ຖ້າມັນເປັນ
ເອີ້ນວ່າ 0 ພາຣາມິເຕີ, ຄ່າຈຳນວນເຕັມຂອງ 15 ຈະຖືກໃຊ້ໂດຍອັດຕະໂນມັດ. ໄດ້
syntax ອະນຸຍາດໃຫ້ຄ່າເລີ່ມຕົ້ນສໍາລັບປະເພດ int, pointer ແລະ string ແລະ scalar ຂອງພວກມັນ
ນາມແຝງ.

ຕົວກໍານົດການເລີ່ມຕົ້ນສາມາດມີຫຼາຍເທົ່າທີ່ເປັນໄປໄດ້, ແຕ່ພວກເຂົາຕ້ອງຢູ່ໃນທ້າຍຂອງ
ບັນຊີລາຍຊື່ພາລາມິເຕີຟັງຊັນ. ການປະກາດ "func(int a = 1, int b)" ບໍ່ຖືກຕ້ອງ.

ນາມແຝງ
ໃນລະຫັດ C ທີ່ສ້າງຂຶ້ນ, ຟັງຊັນ C ຕ້ອງຖືກເອີ້ນຫຼັງຈາກພາລາມິເຕີແລ້ວ
ວິເຄາະແລ້ວ. Gencls ຄາດວ່າຈະມີຫນ້າທີ່ສອດຄ່ອງຢູ່ໃນລະຫັດ C, ທີ່ມີຊື່ຄົງທີ່
ແລະບັນຊີລາຍຊື່ພາລາມິເຕີ. ຢ່າງໃດກໍຕາມ, ຖ້າຫາກວ່າວຽກງານຂອງຫນ້າທີ່ດັ່ງກ່າວເປັນ wrapper ກັບຄືກັນ
ຟັງຊັນທີ່ຕີພິມພາຍໃຕ້ຊື່ອື່ນ, aliasing ສາມາດ preformed ເພື່ອບັນທຶກທັງລະຫັດແລະ
ຄວາມໄວ.

ຕົວຢ່າງ:

ແພັກເກດຊຸດ {
void func( int x) => ພາຍໃນ;
}

ຟັງຊັນທີ່ປະກາດໃນແບບນັ້ນຈະບໍ່ໂທຫາ Package_func() C function, ແຕ່
ພາຍໃນ() function ແທນ. ການຮ້ອງຂໍພຽງແຕ່ວ່າ ພາຍໃນ() ຫນ້າທີ່ຕ້ອງມີ
ຕົວກໍານົດການດຽວກັນແລະການປະກາດຜົນກັບ a func().

ເສັ້ນ hash
ວິທີທີ່ສະດວກໃນການໂທຫາຟັງຊັນທີ່ມີ hash ເປັນພາລາມິເຕີຈາກ perl ໄດ້ຖືກສ້າງຂື້ນ. ຖ້າ ກ
ຟັງຊັນຖືກປະກາດດ້ວຍພາລາມິເຕີສຸດທ້າຍ ຫຼືພິມ "HV*", ຈາກນັ້ນແປພາລາມິເຕີ
ຈາກ perl ຫາ C ແມ່ນປະຕິບັດຄືກັບວ່າຕົວກໍານົດການທັງຫມົດທີ່ຜ່ານແມ່ນ hash. hash ນີ້ແມ່ນ
ຜ່ານໄປຫາຟັງຊັນ C ແລະເນື້ອຫາຂອງມັນກັບຄືນມາຫຼັງຈາກນັ້ນກັບຄືນໄປບ່ອນ perl ເປັນ hash ອີກເທື່ອຫນຶ່ງ.
ເນື້ອໃນ hash ສາມາດຖືກແກ້ໄຂພາຍໃນຟັງຊັນ C.

ການປະກາດນີ້ຖືກນໍາໃຊ້ຢ່າງຫຼວງຫຼາຍໃນຜູ້ກໍ່ສ້າງ, ເຊິ່ງລະຫັດ perl ແມ່ນປົກກະຕິ

ຍ່ອຍ
{
%ret = shift-> SUPER ຂອງຂ້ອຍ::init(@_);
...
ກັບຄືນ %ret;
}

ແລະລະຫັດ C ແມ່ນປົກກະຕິແລ້ວ

void Obj_init (HV * profile) {
init(ໂປຣໄຟລ໌);
... [ປັບ​ປຸງ​ແກ້​ໄຂ​ເນື້ອ​ໃນ​ຂໍ້​ມູນ​] ...
}

ວິທີການ
ວິທີການແມ່ນຫນ້າທີ່ເອີ້ນວ່າໃນສະພາບການຂອງວັດຖຸ. ເກືອບທຸກວິທີການຕ້ອງການ
ມີການເຂົ້າເຖິງວັດຖຸທີ່ເຂົາເຈົ້າກໍາລັງຈັດການກັບ. ວັດຖຸ Prima ແມ່ນເຫັນໄດ້ໃນ C as
ຈັດການປະເພດຂໍ້ມູນ. ຕົວຈັບດັ່ງກ່າວແມ່ນຕົວຊີ້ໄປຫາຕົວຢ່າງວັດຖຸ, ເຊິ່ງໃນທາງກັບກັນ
ມີຕົວຊີ້ໄປຫາຕາຕະລາງວິທີການ virtual ຂອງວັດຖຸ ( VMT ). ເພື່ອອໍານວຍຄວາມສະດວກໃຫ້ OO-like
syntax, ພາລາມິເຕີ Handle ນີ້ແມ່ນເກືອບບໍ່ເຄີຍຖືກກ່າວເຖິງໃນວິທີການທັງຫມົດຂອງວັດຖຸ
ຄໍາອະທິບາຍຢູ່ໃນໄຟລ໌ cls, ເຖິງແມ່ນວ່າຈະຖືກນັບ implicit, ດັ່ງນັ້ນທຸກໆວິທີການ cls
ການປະກາດ

ວິທີການ void a( int x)

ສໍາລັບ object class Object ແມ່ນສະທ້ອນໃຫ້ເຫັນໃນ C as

void Object_a(ຈັດການດ້ວຍຕົນເອງ, int x)

ການ​ປະ​ກາດ​ຫນ້າ​ທີ່​. ກົງກັນຂ້າມກັບຫນ້າທີ່ຫຸ້ມຫໍ່, gencls ນັ້ນບໍ່ສາມາດເຜີຍແຜ່ໄດ້ຖ້າ
ມັນ​ບໍ່​ສາ​ມາດ​ທີ່​ຈະ​ຈັດ​ການ​ກັບ​ການ​ບໍ່​ໄດ້​ຮັບ​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ໃນ​ຕົວ​ກໍາ​ນົດ​ການ unconvertible ໄດ້​, ມີ​ວິ​ທີ​ການ​
ອອກຖະແຫຼງການດັ່ງກ່າວດ້ວຍວິທີການ. ການນໍາໃຊ້ຕົ້ນຕໍສໍາລັບການນັ້ນແມ່ນຊື່ວິທີການໄດ້ຮັບ
ສະຫງວນໄວ້ໃນ VMT ຂອງວັດຖຸ.

ວິທີການແມ່ນສາມາດເຂົ້າເຖິງໄດ້ໃນລະຫັດ C ໂດຍການອ້າງອິງຊື່ໂດຍກົງຂອງ "Handle self" ເປັນ.
ໂຄງ​ປະ​ກອບ​ການ​ທີ່​ສອດ​ຄ້ອງ​ກັນ​:

(((PSampleObject) self)-> ຕົນເອງ)-> sample_method(ຕົນເອງ, ...);

ວິທີການສາມາດມີຫນຶ່ງໃນຫົກຄໍານໍາຫນ້າທີ່ຄວບຄຸມການສ້າງລະຫັດ C:

ວິທີການ
ນີ້ແມ່ນປະເພດວິທີການທໍາອິດແລະພື້ນຖານທີ່ສຸດ. ມັນເປັນຊື່ prefix, "ວິທີການ" ແມ່ນ
ດັ່ງນັ້ນຈຶ່ງໄດ້ຖືກເລືອກເປັນຊື່ທີ່ອະທິບາຍຫຼາຍທີ່ສຸດ. ວິທີການຄາດວ່າຈະຖືກລະຫັດໃນ
C, ຈຸດຈັບວັດຖຸແມ່ນ implicit ແລະບໍ່ໄດ້ຖືກລວມເຂົ້າໃນຄໍາອະທິບາຍ .cls.

ວິທີການ void a()

ຜົນໄດ້ຮັບໃນ

void Object_a(ຈັດການດ້ວຍຕົນເອງ)

C ປະກາດ. ວິທີການທີ່ຖືກເຜີຍແຜ່ຈະປ່ຽນພາລາມິເຕີຂອງມັນໂດຍອັດຕະໂນມັດແລະຜົນໄດ້ຮັບ
ລະຫວ່າງ C ແລະ perl.

ສາທາລະນະ
ເມື່ອວິທີການທີ່ມີພາລາມິເຕີແລະ / ຫຼືຜົນໄດ້ຮັບທີ່ບໍ່ສາມາດອັດຕະໂນມັດ
ປ່ຽນລະຫວ່າງ C ແລະ perl ຕ້ອງໄດ້ຮັບການປະກາດ, ຫຼືການປະກາດຫນ້າທີ່ບໍ່ໄດ້
ເຫມາະກັບ C syntax, ຄໍານໍາຫນ້າ "ສາທາລະນະ" ຖືກໃຊ້. ວິທີການປະກາດດ້ວຍ "ສາທາລະນະ" ແມ່ນ
ຄາດວ່າຈະຕິດຕໍ່ສື່ສານກັບ perl ໂດຍວິທີການຂອງ XS (ເບິ່ງ perlxs ). ມັນຍັງເປັນ
ຄາດວ່າວິທີການ "ສາທາລະນະ" ສ້າງທັງຫນ້າທີ່ REDEFINED ແລະ FROMPERL (ເບິ່ງ
Prima::internals ສໍາລັບລາຍລະອຽດ). ຕົວຢ່າງແມ່ນມີຫຼາຍໃນທົ່ວແຫຼ່ງ Prima, ແລະຈະ
ບໍ່ໄດ້ສະແດງຢູ່ທີ່ນີ້. ວິທີການ "ສາທາລະນະ" ປົກກະຕິແລ້ວມີຜົນໄດ້ຮັບ void ແລະບໍ່ມີຕົວກໍານົດການ, ແຕ່
ນັ້ນບໍ່ສໍາຄັນຫຼາຍ, ເພາະວ່າ gencls ບໍ່ມີການປ່ຽນໃຈເຫລື້ອມໃສສໍາລັບວິທີການດັ່ງກ່າວ.

ການນໍາເຂົ້າ
ສໍາລັບວິທີການທີ່ບໍ່ສົມເຫດສົມຜົນໃນລະຫັດ C ແຕ່ໃນ perl ແທນທີ່ຈະ, gencls ສາມາດເປັນ
ບອກໃຫ້ຜະລິດ wrappers ທີ່ສອດຄ້ອງກັນໂດຍໃຊ້ "ນໍາເຂົ້າ" ຄໍານໍາຫນ້າ. ປະເພດນີ້ ກ
ວິທີການສາມາດເຫັນໄດ້ວ່າເປັນ "ວິທີການ" ພາຍໃນພາຍນອກ. ຟັງຊັນ "ນໍາເຂົ້າ" ບໍ່ຈໍາເປັນຕ້ອງມີ C
ຄູ່ກັນ, ຍົກເວັ້ນລະຫັດທີ່ສ້າງຂຶ້ນອັດຕະໂນມັດ.

ໄຟຟ້າສະຖິດ
ຖ້າວິທີການຕ້ອງສາມາດເຮັດວຽກໄດ້ທັງກັບແລະບໍ່ມີຕົວຢ່າງວັດຖຸ, ມັນຕ້ອງການ
ຈະຖືກນໍາຫນ້າດ້ວຍຄໍານໍາຫນ້າ "static". ວິທີການ "static" ແມ່ນຄ້າຍຄືກັນກັບ "ວິທີການ",
ຍົກ​ເວັ້ນ​ພາ​ຣາ​ມິ​ເຕີ​ທໍາ​ອິດ "ຈັດ​ການ​ດ້ວຍ​ຕົນ​ເອງ​" ບໍ່​ໄດ້​ຖືກ​ປະ​ກາດ implicitly​. ຖ້າ "ສະຖິດ"
ວິທີການແມ່ນເອີ້ນວ່າໂດຍບໍ່ມີວັດຖຸ (ແຕ່ມີຫ້ອງຮຽນ), ເຊັ່ນ

ຫ້ອງຮຽນ::Object-> static_method();

ພາຣາມິເຕີທຳອິດຂອງມັນບໍ່ແມ່ນວັດຖຸແຕ່ເປັນສະຕຣິງ "Class::Object". ຖ້າວິທີການບໍ່ເຄີຍ
ຈັດການກັບວັດຖຸ, ມັນພຽງພໍທີ່ຈະໃຊ້ການປະກາດຂອງມັນ

static a( char * className = "");

ແຕ່ຖ້າເຮັດ, a

static a(SV * class_or_object = nil);

ການປະກາດແມ່ນຈໍາເປັນ. ໃນກໍລະນີສຸດທ້າຍລະຫັດ C ຕົວຂອງມັນເອງຕ້ອງກໍານົດສິ່ງທີ່ແນ່ນອນມີ
ໄດ້ຜ່ານ, ຖ້າເຄີຍ. ໃຫ້ສັງເກດວ່າຕົວກໍານົດການເລີ່ມຕົ້ນຢູ່ທີ່ນີ້: ວິທີການ "static" ແມ່ນປົກກະຕິແລ້ວ
ສາມາດເອີ້ນໄດ້ວ່າເປັນ

ຫ້ອງຮຽນ::ວັດຖຸ::static_method();

ບ່ອນທີ່ບໍ່ມີຕົວກໍານົດການຖືກສົ່ງກັບມັນ. ໂດຍບໍ່ມີພາລາມິເຕີມາດຕະຖານເຊັ່ນການໂທ
ສ້າງ 'ພາຣາມິເຕີບໍ່ພຽງພໍຜ່ານ' ຄວາມຜິດພາດ runtime.

weird
ພວກເຮົາບໍ່ສາມາດຊອກຫາຊື່ທີ່ດີກວ່າສໍາລັບມັນ. ຄໍານໍາຫນ້າ "weird" ຫມາຍເຖິງວິທີການທີ່ປະສົມປະສານ
ຄຸນສົມບັດທັງຈາກ "static" ແລະ "ສາທາລະນະ". ໃນຄໍາສັບຕ່າງໆອື່ນໆ, gencls ຜະລິດບໍ່ມີ
ລະຫັດການປ່ຽນໃຈເຫລື້ອມໃສແລະຄາດວ່າຈະບໍ່ມີ "ຈັດການຕົນເອງ" ເປັນຕົວກໍານົດການທໍາອິດສໍາລັບວິທີການດັ່ງກ່າວ.
ເປັນຕົວຢ່າງ Prima::Image::load ສາມາດສະແດງໄດ້, ເຊິ່ງສາມາດເອີ້ນວ່າການນໍາໃຊ້ກວ້າງ
spectrum ຂອງ semantics ການໂທຫາ (ເບິ່ງ Prima::image-load ສໍາລັບລາຍລະອຽດ).

c_ເທົ່ານັ້ນ
ດັ່ງທີ່ຊື່ຂອງມັນລະບຸ, "c_only" ແມ່ນວິທີການທີ່ມີຢູ່ໃນ VMT ແຕ່ບໍ່ແມ່ນ
ສາມາດເຂົ້າເຖິງໄດ້ຈາກ perl. ມັນສາມາດ overloaded ຈາກ C ເທົ່ານັ້ນ. ຍິ່ງໄປກວ່ານັ້ນ, ມັນໄດ້ຖືກອະນຸຍາດໃຫ້
ລົງທະບຽນຟັງຊັນ perl ທີ່ມີຊື່ຂອງວິທີການ "c_only", ແລະຍັງມີຫນ່ວຍງານເຫຼົ່ານີ້
ຈະເປັນເອກະລາດທັງຫມົດຈາກກັນແລະກັນ - overloading ຈະບໍ່ເກີດຂຶ້ນ.

NB: ວິທີການທີ່ມີຜົນໄດ້ຮັບແລະ / ຫຼືພາລາມິເຕີປະເພດຂໍ້ມູນທີ່ບໍ່ສາມາດປ່ຽນໄດ້
ອັດຕະໂນມັດ, ປ່ຽນຄໍານໍາຫນ້າຂອງພວກເຂົາເປັນ "c_only". ອາດຈະເປັນການປະພຶດທີ່ບໍ່ຖືກຕ້ອງ,
ແລະເງື່ອນໄຂດັ່ງກ່າວຕ້ອງສົ່ງສັນຍານຄວາມຜິດພາດ.

ອະສັງຫາ
Prima toolkit ແນະນໍາ entity ຊື່ຊັບສິນ, ທີ່ຄາດວ່າຈະທົດແທນວິທີການ
ຄູ່​ທີ່​ມີ​ຫນ້າ​ທີ່​ແມ່ນ​ເພື່ອ​ໄດ້​ຮັບ​ແລະ​ກໍາ​ນົດ​ຕົວ​ແປ​ວັດ​ຖຸ​ພາຍ​ໃນ​ບາງ​, ສໍາ​ລັບ​ການ​ຍົກ​ຕົວ​ຢ່າງ​,
ຊື່ວັດຖຸ, ສີ ແລະ ອື່ນໆ. ແທນທີ່ຈະມີວິທີການຄູ່ເຊັ່ນ Object::set_color ແລະ
Object::get_color, a property Object::color is devised. ຊັບສິນແມ່ນວິທີການທີ່ມີ
ການພິຈາລະນາພິເສດ, ໂດຍສະເພາະ, ໃນເວລາທີ່ມັນຖືກເອີ້ນວ່າບໍ່ມີພາລາມິເຕີ, ຮູບແບບ 'get'
ຫມາຍເຖິງ. ໃນທາງກົງກັນຂ້າມ, ຖ້າມັນຖືກເອີ້ນດ້ວຍຕົວກໍານົດການຫນຶ່ງ, ໂຫມດ 'ຊຸດ' ຈະຖືກກະຕຸ້ນ.
ໃຫ້ສັງເກດວ່າໃນທັງສອງ 'ຕັ້ງ' ແລະ 'get' invocations "Handle self" ຕົວກໍານົດການ implicit ທໍາອິດແມ່ນ.
ສະເຫມີ.

ຄຸນສົມບັດສາມາດປະຕິບັດດ້ວຍຕົວກໍານົດການທີ່ແຕກຕ່າງກັນ, ແຕ່ຄົງທີ່, ແລະປະຕິບັດ 'ຊຸດ'
ແລະຟັງຊັນ 'get' ພຽງແຕ່ສໍາລັບອັນດຽວ. ໂດຍຄ່າເລີ່ມຕົ້ນຕົວກໍານົດການພຽງແຕ່ implicit "Handle
ຕົນເອງ":

ຊັບສິນ char * ຊື່

ມີຄູ່ C

char * Object_name (ຈັບ​ຕົນ​ເອງ​, Bool set​, char * ຊື່​)

ອີງຕາມຮູບແບບ, "Bool set" ແມ່ນ "ຄວາມຈິງ" ຫຼື "ຜິດ". ໃນໂຫມດ 'ຕັ້ງ' ເປັນລະຫັດ C
ຜົນໄດ້ຮັບຖືກຍົກເລີກ, ໃນໂຫມດ 'get' ຄ່າພາລາມິເຕີແມ່ນບໍ່ໄດ້ກໍານົດ.

syntax ສໍາລັບຄຸນສົມບັດຫຼາຍພາລາມິເຕີແມ່ນ

property long pixel(int x, int y);

ແລະລະຫັດ C

long Object_pixel(ຈັບ​ເອງ, Bool set, int x, int y, long pixel)

ໃຫ້ສັງເກດວ່າໃນກໍລະນີຫຼາຍພາລາມິເຕີ, ຕົວກໍານົດການປະກາດຫຼັງຈາກຊື່ຊັບສິນແມ່ນ
ເລີ່ມຕົ້ນສະເຫມີ, ໃນທັງສອງໂຫມດ 'ຊຸດ' ແລະ 'get'.

ຕົວຢ່າງ ຕົວແປ
ທຸກໆວັດຖຸແມ່ນມີລັກສະນະສະເພາະພາຍໃນຂອງມັນ. Gencls syntax ອະນຸຍາດໃຫ້ a
ການປະກາດຕົວແປ, ສໍາລັບຕົວແປທີ່ຈັດສັນສໍາລັບທຸກໆຕົວຢ່າງວັດຖຸ. ເຖິງແມ່ນວ່າ
ການກວດສອບປະເພດຂໍ້ມູນບໍ່ໄດ້ດໍາເນີນການສໍາລັບຕົວແປ, ແລະການປະກາດຂອງພວກເຂົາພຽງແຕ່ໄດ້ຮັບ
ຄັດລອກ 'ເປັນ', ການປະກາດ C ທີ່ຊັບຊ້ອນທີ່ກ່ຽວຂ້ອງກັບ array, struct ແລະ function pointers ແມ່ນ
ບໍ່ຮັບຮູ້. ໃນຖານະເປັນການແກ້ໄຂ, ຕົວຊີ້ໄປຫາຫນ່ວຍງານ typedef'd ຖືກນໍາໃຊ້. ຕົວຢ່າງ:

ວັດຖຸ SampleObject {
intx;
ບັນຊີລາຍຊື່;
ໂຄງສ້າງ { int x } s; # ປະກາດຜິດກົດໝາຍ
}

ຕົວແປແມ່ນສາມາດເຂົ້າເຖິງໄດ້ໃນລະຫັດ C ໂດຍການອ້າງອີງຊື່ໂດຍກົງຂອງ "ຈັດການດ້ວຍຕົນເອງ" ເປັນ.
ໂຄງ​ປະ​ກອບ​ການ​ທີ່​ສອດ​ຄ້ອງ​ກັນ​:

((PSampleObject) self)-> x;

AUTHORS


Dmitry Karasik,[email protected]>. Anton Berezin,[email protected]>.

ໃຊ້ prima-gencls ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net


ເຊີບເວີ ແລະສະຖານີເຮັດວຽກຟຣີ

ດາວໂຫຼດແອັບ Windows ແລະ Linux

  • 1
    PostInstallerF
    PostInstallerF
    PostInstallerF ຈະຕິດຕັ້ງທັງໝົດ
    ຊອບແວທີ່ Fedora Linux ແລະອື່ນໆ
    ບໍ່ລວມເອົາຕາມຄ່າເລີ່ມຕົ້ນ, ຫຼັງຈາກ
    ແລ່ນ Fedora ເປັນຄັ້ງທໍາອິດ. ຂອງມັນ
    ງ່າຍ​ສໍາ​ລັບ ...
    ດາວໂຫລດ PostInstallerF
  • 2
    ສາຍແຮ່
    ສາຍແຮ່
    ໂຄງການເສັ້ນທາງໄດ້ຖືກຍ້າຍໄປ
    https://strace.io. strace is a
    ການວິນິດໄສ, debugging ແລະຄໍາແນະນໍາ
    userspace tracer ສໍາລັບ Linux. ມັນຖືກນໍາໃຊ້
    ຕິດ​ຕາມ​ກວດ​ກາ ...
    ດາວ​ໂຫຼດ​ຕິດ​ຕາມ​
  • 3
    gMKVEExtractGUI
    gMKVEExtractGUI
    GUI ສໍາລັບຜົນປະໂຫຍດ mkvextract (ສ່ວນຫນຶ່ງຂອງ
    MKVToolNix​) ທີ່​ປະ​ກອບ​ສ່ວນ​ຫຼາຍ (ຖ້າ​ຫາກ​ວ່າ​
    ບໍ່ແມ່ນທັງຫມົດ) ການເຮັດວຽກຂອງ mkvextract ແລະ
    mkvinfo ຜົນປະໂຫຍດ. ຂຽນໃນ C#NET 4.0,...
    ດາວໂຫລດ gMKVEExtractGUI
  • 4
    ຫໍສະໝຸດ JasperReports
    ຫໍສະໝຸດ JasperReports
    ຫໍສະຫມຸດ JasperReports ແມ່ນ
    ແຫຼ່ງເປີດທີ່ນິຍົມທີ່ສຸດໃນໂລກ
    ທາງທຸລະກິດແລະການລາຍງານ
    ເຄື່ອງຈັກ. ມັນຖືກຂຽນທັງຫມົດໃນ Java
    ແລະ​ມັນ​ສາ​ມາດ ...
    ດາວໂຫລດ JasperReports Library
  • 5
    ປຶ້ມ Frappe
    ປຶ້ມ Frappe
    Frappe Books ເປັນແຫຼ່ງຟຣີ ແລະເປີດ
    ຊອບ​ແວ​ການ​ຮັກ​ສາ​ປື້ມ​ບັນ​ທຶກ desktop ວ່າ​
    ງ່າຍ​ດາຍ​ແລະ​ດີ​ອອກ​ແບບ​ທີ່​ຈະ​ນໍາ​ໃຊ້​ໂດຍ​
    ທຸລະກິດຂະໜາດນ້ອຍ ແລະນັກອິດສະລະ. ມັນ...
    ດາວໂຫລດປື້ມ Frappe
  • 6
    Python ຕົວເລກ
    Python ຕົວເລກ
    ຂ່າວ: NumPy 1.11.2 ເປັນການປ່ອຍຄັ້ງສຸດທ້າຍ
    ທີ່ຈະເຮັດໃນ sourceforge. ລໍ້
    ສໍາລັບ Windows, Mac, ແລະ Linux ເຊັ່ນດຽວກັນກັບ
    ການແຈກຢາຍແຫຼ່ງທີ່ເກັບໄວ້ໃນແຟ້ມສາມາດເປັນສີ່...
    ດາວໂຫລດ Numerical Python
  • ເພີ່ມເຕີມ »

Linux ຄຳ ສັ່ງ

Ad