Каково различие между объектом и классом в Perl?

Используйте понимание вложенного кортежа и isinstance:

output = [tuple(j for j in i if not isinstance(j, str)) for i in ListTuples]

Вывод:

[(100,), (80,), (20,), (40,), (40,)]

Обратите внимание, что в кортежах есть запятые, чтобы отличать их от, например, (100), который идентичен 100.

6
задан S.L. Barth - Reinstate Monica 21 July 2012 в 09:26
поделиться

7 ответов

Существует много "класса, проект, объект является чем-то созданным из того проекта", но так как Вы попросили определенный пример с помощью Американского лося и Perl, я думал, что обеспечу тот.

В этом следующем примере мы идем, имеют класс под названием 'Хакер'. Класс (как проект) описывает то, что хакеры (их атрибуты) и что они могут сделать (их методы):

package Hacker;       # Perl 5 spells 'class' as 'package'

use Moose;            # Also enables strict and warnings;

# Attributes in Moose are declared with 'has'.  So a hacker
# 'has' a given_name, a surname, a login name (which they can't change)
# and a list of languages they know.

has 'given_name'       => (is => 'rw', isa => 'Str');
has 'surname'          => (is => 'rw', isa => 'Str');
has 'login'            => (is => 'ro', isa => 'Str');
has 'languages'        => (is => 'rw', isa => 'ArrayRef[Str]');

# Methods are what a hacker can *do*, and are declared in basic Moose
# with subroutine declarations.

# As a simple method, hackers can return their full name when asked.

sub full_name {
    my ($self) = @_;   # $self is my specific hacker.

    # Attributes in Moose are automatically given 'accessor' methods, so
    # it's easy to query what they are for a specific ($self) hacker.

    return join(" ", $self->given_name, $self->surname);
}

# Hackers can also say hello.

sub say_hello {
    my ($self) = @_;

    print "Hello, my name is ", $self->full_name, "\n";

    return;
}

# Hackers can say which languages they like best.

sub praise_languages {
    my ($self) = @_;

    my $languages = $self->languages;

    print "I enjoy programming in: @$languages\n";

    return;
}

1;   # Perl likes files to end in a true value for historical reasons.

Теперь, когда у нас есть наш класс Хакера, мы можем начать делать объекты Хакера:

#!/usr/bin/perl
use strict;
use warnings;
use autodie;

use Hacker;    # Assuming the above is in Hacker.pm

# $pjf is a Hacker object

my $pjf = Hacker->new(
    given_name => "Paul",
    surname    => "Fenwick",
    login      => "pjf",
    languages  => [ qw( Perl C JavaScript) ],
);

# So is $jarich

my $jarich = Hacker->new(
    given_name => "Jacinta",
    surname    => "Richardson",
    login      => "jarich",
    languages  => [ qw( Perl C Haskell ) ],
);

# $pjf can introduce themselves.

$pjf->say_hello;
$pjf->praise_languages;

print "\n----\n\n";

# So can $jarich

$jarich->say_hello;
$jarich->praise_languages;

Это приводит к следующему выводу:

Hello, my name is Paul Fenwick
I enjoy programming in: Perl C JavaScript

----

Hello, my name is Jacinta Richardson
I enjoy programming in: Perl C Haskell

Если я хочу, у меня может быть столько объектов Хакера, сколько мне нравится, но существует все еще только один класс Хакера, который описывает, как работают все они.

Всего наилучшего,

Paul

20
ответ дан 8 December 2019 в 02:12
поделиться

Класс является типом (как "внедорожник"). Объект является экземпляром класса ("внедорожник David").

9
ответ дан 8 December 2019 в 02:12
поделиться

Мудрый Perl:

  • Класс является a package- спецификация. Ряд поведений и данных главным образом для помощи тем поведениям.
  • Объект обычно является "hashref", который является набором определенных данных, позволенных спецификацией поведения в пакете (и наследованные поведения).

Теперь, hashref мог бы содержать ссылку кода. В большинстве случаев это - поведение. Но единственный способ, которым объект мог использовать то определенное поведение, для которого можно быть указан некоторым наследованным поведением класса (или смешан в), который ожидает, что мог бы быть coderef, находящийся в том местоположении, и вызвать его.

7
ответ дан 8 December 2019 в 02:12
поделиться

Другим способом думать о нем является класс, проект того, как будет создан объект.

3
ответ дан 8 December 2019 в 02:12
поделиться

Объекты являются единственными экземплярами Класса.

2
ответ дан 8 December 2019 в 02:12
поделиться

Вы - объект класса Человек

(Классы в Perl являются модулями с некоторыми специальными качествами, необходимо лучше сначала понять только общий случай).

2
ответ дан 8 December 2019 в 02:12
поделиться

Я не вижу, что люди используют термины тот же путь на других языках. Это может быть одной причиной вопроса. Я думаю, возможно, что пользователи PHP говорят "класс", когда они должны сказать "объект", много времени?

Так или иначе, что относительно этого примера - предполагают, что необходимо было создать два различных соединения с базой данных для двух различных баз данных:

my $oracle_database_handle = DBI->connect( <oracle connection details here> );

my $mysql_database_handle =  DBI->connect( <mysql connection details here>  );

Вы создали бы два объекта для того, чтобы сделать две разных вещи, но они - оба тот же вид вещи - соединения с базой данных DBI.

0
ответ дан 8 December 2019 в 02:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: