Perl에서 여러 개체를 만들고 동일한 방법에 액세스하는 방법은 무엇입니까?

하 샤드

여러 메서드로 패키지를 만들고 액세스하려고했지만 해시 값을 제공하고 예상 했습니까? 다음은 코드입니다.

package student_data;
use strict;
use warnings;
use diagnostics;
use Carp;

# init cell with cell name
sub new_student{
    my ($class,$args) = @_;
     my $self = { student_name => $args->{student_name} || 'default_value',  
          reg_number => $args->{reg_number} || 'default_value',
          dob => $args->{dob} || 'default_value',
          subjects=> {}
                 };

    bless $self, $class;
    return $self;
}


sub new_subject{
    my ($class,$args) = @_;
        my $self = { subject_name => $args->{subject_name} || 'default_value',
             credit => $args->{credit} || 'default_value',  
             grade => $args->{grade} || 'default_value',
                };
    #bless $self, $class;
    return $self
}

sub add_subject{
    my ($self,$args) = @_;
    my $sub1 = $self->new_subject($args);
    ++$self->{subject}{$sub1};
    return $self;
}

sub get_subject{
    my ($self, $args) = @_;
    #$self->{subject}{$sub1};
    return $self;
} 

1;

#use student_data;

my @all_students = ();

my $stud1= student_data->new_student({student_name =>"john",reg_number => "12"});

my $sub1 = student_data->new_subject({subject_name => "A" , credit => "3"}) ;
++$stud1->{subjects}{$sub1};

my $sub2 = student_data->new_subject({subject_name => "B" , grade => "50"}) ;
$stud1->add_subject($sub2);

push(@all_students, $stud1);

my $stud2= student_data->new_student({student_name =>"johnny",dob => "110388"});

my $sub3 = student_data->new_subject({subject_name => "B" , credit => "4"}) ;
++$stud1->{subjects}{$sub3};

my $sub4 = student_data->new_subject({subject_name => "A" , grade => "50"}) ;
$stud1->add_subject($sub4);

push(@all_students, $stud2) ;

my $et_stud = pop(@all_students);

print "\n student_name : $et_stud->{student_name} \n dob : $et_stud->{dob} \n subjects : $et_stud->{subjects}";

student_name : johnny
dob : 110388
과목 : HASH (0x10301b8)

하지만 기대합니다.

student_name : johnny reg_number : default_value dob : 110388
subject_name : A
학점 : 3
학년 : default_value
subject_name : B 학점 : default_value 학점 : 50

보로딘

나는 당신이 Perl 객체 지향을 이해하는 데 정말 먼 길을 택하고있는 것 같아서, 작동하는 버전을 작성하는 것 외에 당신을 도울 방법을 아는 것은 정말 어렵습니다.

I는 (A)의 구성을 변경 한 Student그 때문에 오브젝트 subjects필드가있다 어레이Subject개체

학생당 과목이 중복되는 것을 방지하기 위해 해시를 사용하는 것이 가치가 있다는 것을 알 수 있었지만 원본에없는 경우 오류 처리가 수반됩니다. 그러나 추가 use Carp했기 때문에 생성자에서 잘못된 인수를 경고하는 데 사용하는 코드를 포함했습니다.

Student.pm

package Student;

use strict;
use warnings 'all';

use Carp;

sub new {
    my $class = shift;
    my %args = @_;

    my $self = {
        name       => delete $args{student_name} // 'default_value',
        reg_number => delete $args{reg_number} // 'default_value',
        dob        => delete $args{dob} // 'default_value',
        subjects    => [],
    };

    carp 'Unexpected arguments ', join ', ', keys %args if keys %args;

    return bless $self, $class;
}

sub name {
    my $self = shift;

    return $self->{name};
}

sub dob {
    my $self = shift;

    return $self->{dob};
}

sub reg_number {
    my $self = shift;

    return $self->{reg_number};
}

sub add_subject{
    my $self = shift;
    my ($subject) = @_;

    my $subjects = $self->{subjects};

    push @$subjects, $subject;

    return $self;    # So that add_subject may be chained
}

sub subjects { 
    my $self = shift;

    @{ $self->{subjects} };
} 

1;

Subject.pm

package Subject;

use strict;
use warnings 'all';

use Carp;

sub new {
    my $class = shift;
    my %args = @_;

    my $self = {
        name   => delete $args{subject_name} // 'default_value',
        credit => delete $args{credit} // 'default_value',
        grade  => delete $args{grade} // 'default_value',
    };

    carp 'Unexpected arguments ', join ', ', keys %args if keys %args;

    return bless $self, $class;
}

sub name {
    my $self = shift;

    return $self->{name};
}

sub credit {
    my $self = shift;

    return $self->{credit};
}

sub grade {
    my $self = shift;

    return $self->{grade};
}

1;

main.pl

use strict;
use warnings 'all';

use Student;
use Subject;

my @all_students;

my $student;

$student = Student->new( student_name => 'john', reg_number => 12 );
$student->add_subject( Subject->new( subject_name => 'A', credit => 3 ) );
$student->add_subject( Subject->new( subject_name => 'B', grade => 50 ) );

push @all_students, $student;


$student = Student->new( student_name => 'johnny', dob => '110388' );
$student->add_subject( Subject->new( subject_name => 'B', credit => 4  ) );
$student->add_subject( Subject->new( subject_name => 'A', grade => 50 ) );

push @all_students, $student;


my $et_stud = pop @all_students;

printf "student_name: %s\n", $et_stud->name;
printf "reg_number: %s\n", $et_stud->reg_number;
printf "dob: %s\n", $et_stud->dob;

for my $subject ( $et_stud->subjects ) {
    print "\n";
    printf "  subject_name: %s\n", $subject->name;
    printf "  credit: %s\n", $subject->credit;
    printf "  grade: %s\n", $subject->grade;
}

산출

student_name: johnny
reg_number: default_value
dob: 110388

  subject_name: B
  credit: 4
  grade: default_value

  subject_name: A
  credit: default_value
  grade: 50

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

여러 개체에서 동일한 리소스에 액세스하는 방법은 무엇입니까?

분류에서Dev

C에서 함수를 사용하여 파일을 만들고 내 응용 프로그램에서 액세스하는 방법은 무엇입니까?

분류에서Dev

@XmlElements를 사용하여 동일한 목록에 다른 개체를 만드는 방법은 무엇입니까?

분류에서Dev

동일한 유형의 여러 개체를 컨트롤러에 전달하는 방법은 무엇입니까?

분류에서Dev

여러 개의 상자를 만들고 한쪽에서만 텍스처를 변경하는 방법은 무엇입니까?

분류에서Dev

R에서 동일한 함수 내에서 여러 필터를 만드는 방법은 무엇입니까?

분류에서Dev

sudoers를 통해 여러 명령에 nopasswd 액세스 권한을 부여하는 방법은 무엇입니까?

분류에서Dev

JSON 배열을 만들고 여기에 JSON 개체를 추가하는 방법은 무엇입니까?

분류에서Dev

동일한 OOP 클래스에서 여러 객체를 수정하는 방법은 무엇입니까?

분류에서Dev

C ++ 여러 클래스에서 동일한 객체를 변경하는 방법은 무엇입니까?

분류에서Dev

vb.net 실행 파일에 JSON 개체를 만들고 저장하는 방법은 무엇입니까?

분류에서Dev

Java를 사용하여 HDFS에서 Parquet 파일을 만들고 채우는 방법은 무엇입니까?

분류에서Dev

사용자에게 액세스 권한을 요청한 다음 연락처를 만들고 여는 방법은 무엇입니까?

분류에서Dev

동일한 UIViewController에서 여러 개체에 대한 iOS UIKit 데이터 소스 및 위임 메서드를 구별하는 방법은 무엇입니까?

분류에서Dev

MVC 컨트롤러에서 동시 액세스를 방지하는 방법은 무엇입니까?

분류에서Dev

배열의 여러 개체에 액세스하는 데 사용하는 방법은 무엇입니까?

분류에서Dev

PHP에서 "file_put_contents"를 사용하여 파일에 액세스하는 방법은 무엇입니까?

분류에서Dev

Bootstrap에서 동일한 여백으로 세 개의 열을 만드는 방법은 무엇입니까?

분류에서Dev

v-for를 사용하여 html 파일의 한 태그에서 vue js의 여러 데이터 요소에 액세스하는 방법은 무엇입니까?

분류에서Dev

javascript를 사용하여 페이지를 변경하지 않고 파일 업로드 선택한 파일에 액세스하는 방법은 무엇입니까?

분류에서Dev

여러 Webpack 팩에서 동일한 jQuery 인스턴스를 공유하는 방법은 무엇입니까?

분류에서Dev

Django에 동일한 객체가 여러 개있는 경우 하나의 객체 만 표시하는 방법은 무엇입니까?

분류에서Dev

동일한 뷰에서 'n'자식 개체와 부모를 만드는 방법은 무엇입니까?

분류에서Dev

MaterialApp 컨텍스트에 액세스하여 모든 페이지를 플러터로들을 수있는 BlocListener를 만드는 방법은 무엇입니까?

분류에서Dev

R의 여러 열에서 텍스트를 추출하고 동일한 열에 붙여 넣는 방법은 무엇입니까?

분류에서Dev

목록에서 여러 GenServer 프로세스를 만들고 그 안에 저장된 데이터를 매핑하는 방법은 무엇입니까?

분류에서Dev

Android Room에서 동일한 개체의 여러 인스턴스를 결합하는 방법은 무엇입니까?

분류에서Dev

Terraform을 사용하여 azure에 대한 목록 / 개수를 사용하여 고유하고 동일하지 않은 이름으로 동일한 유형의 여러 리소스를 만드는 방법은 무엇입니까?

분류에서Dev

특정 셀에서 여러 개인에 대한 이진 변수를 만드는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    여러 개체에서 동일한 리소스에 액세스하는 방법은 무엇입니까?

  2. 2

    C에서 함수를 사용하여 파일을 만들고 내 응용 프로그램에서 액세스하는 방법은 무엇입니까?

  3. 3

    @XmlElements를 사용하여 동일한 목록에 다른 개체를 만드는 방법은 무엇입니까?

  4. 4

    동일한 유형의 여러 개체를 컨트롤러에 전달하는 방법은 무엇입니까?

  5. 5

    여러 개의 상자를 만들고 한쪽에서만 텍스처를 변경하는 방법은 무엇입니까?

  6. 6

    R에서 동일한 함수 내에서 여러 필터를 만드는 방법은 무엇입니까?

  7. 7

    sudoers를 통해 여러 명령에 nopasswd 액세스 권한을 부여하는 방법은 무엇입니까?

  8. 8

    JSON 배열을 만들고 여기에 JSON 개체를 추가하는 방법은 무엇입니까?

  9. 9

    동일한 OOP 클래스에서 여러 객체를 수정하는 방법은 무엇입니까?

  10. 10

    C ++ 여러 클래스에서 동일한 객체를 변경하는 방법은 무엇입니까?

  11. 11

    vb.net 실행 파일에 JSON 개체를 만들고 저장하는 방법은 무엇입니까?

  12. 12

    Java를 사용하여 HDFS에서 Parquet 파일을 만들고 채우는 방법은 무엇입니까?

  13. 13

    사용자에게 액세스 권한을 요청한 다음 연락처를 만들고 여는 방법은 무엇입니까?

  14. 14

    동일한 UIViewController에서 여러 개체에 대한 iOS UIKit 데이터 소스 및 위임 메서드를 구별하는 방법은 무엇입니까?

  15. 15

    MVC 컨트롤러에서 동시 액세스를 방지하는 방법은 무엇입니까?

  16. 16

    배열의 여러 개체에 액세스하는 데 사용하는 방법은 무엇입니까?

  17. 17

    PHP에서 "file_put_contents"를 사용하여 파일에 액세스하는 방법은 무엇입니까?

  18. 18

    Bootstrap에서 동일한 여백으로 세 개의 열을 만드는 방법은 무엇입니까?

  19. 19

    v-for를 사용하여 html 파일의 한 태그에서 vue js의 여러 데이터 요소에 액세스하는 방법은 무엇입니까?

  20. 20

    javascript를 사용하여 페이지를 변경하지 않고 파일 업로드 선택한 파일에 액세스하는 방법은 무엇입니까?

  21. 21

    여러 Webpack 팩에서 동일한 jQuery 인스턴스를 공유하는 방법은 무엇입니까?

  22. 22

    Django에 동일한 객체가 여러 개있는 경우 하나의 객체 만 표시하는 방법은 무엇입니까?

  23. 23

    동일한 뷰에서 'n'자식 개체와 부모를 만드는 방법은 무엇입니까?

  24. 24

    MaterialApp 컨텍스트에 액세스하여 모든 페이지를 플러터로들을 수있는 BlocListener를 만드는 방법은 무엇입니까?

  25. 25

    R의 여러 열에서 텍스트를 추출하고 동일한 열에 붙여 넣는 방법은 무엇입니까?

  26. 26

    목록에서 여러 GenServer 프로세스를 만들고 그 안에 저장된 데이터를 매핑하는 방법은 무엇입니까?

  27. 27

    Android Room에서 동일한 개체의 여러 인스턴스를 결합하는 방법은 무엇입니까?

  28. 28

    Terraform을 사용하여 azure에 대한 목록 / 개수를 사용하여 고유하고 동일하지 않은 이름으로 동일한 유형의 여러 리소스를 만드는 방법은 무엇입니까?

  29. 29

    특정 셀에서 여러 개인에 대한 이진 변수를 만드는 방법은 무엇입니까?

뜨겁다태그

보관