Symta: type person{Name Age} name/Name age/Age person.`<` X = $age < X.age person.as_text = "{$name} ({$age})"
Group = [person{'Bob' 33}, person{'Chris' 16}, person{'Ash' 16}]
say Group.sort.flip
Ruby: class Person attr_reader :name, :age def initialize(name, age) @name, @age = name, age end def <=>(person) # the comparison operator for sorting age <=> person.age end def to_s "#{name} (#{age})" end end
group = [ Person.new("Bob", 33), Person.new("Chris", 16), Person.new("Ash", 23) ]
puts group.sort.reverse
Name:
Anonymous2014-12-27 1:49
Symta is verbose, compared to Perl.
Perl 5: Modern Perl 5 way
use strict; use warnings; use 5.18.0;
{
package Person; use Moose;
use overload '""' => sub { $_[0]->name . ' (' . $_[0]->age . ')' }; has name => is => 'rw', default => sub { 'Anonymous' };
has age => is => 'rw', default => sub { 1337 }; }
my @group = (
Person->new({ name => 'Bob', age => 33 }), Person->new({ name => 'Chris', age => 16 }), Person->new({ name => 'Ash', age => 23 }), );
say for sort { $a->age <=> $b->age } @group;
Perl 5: Blessed way
use strict; use warnings; use 5.18.0;
{
package Person; use strict; use warnings;
use overload '""' => sub { "$_[0]->{name} ($_[0]->{age})" };
sub new { my ($class, $args) = @_; bless { name => ($args->{name} // 'Anonymous'), age => ($args->{age} // 0) }, $class; } }
my @group = (
Person->new({ name => 'Bob', age => 33 }), Person->new({ name => 'Chris', age => 16 }), Person->new({ name => 'Ash', age => 23 }), );
say for sort { $a->{age} <=> $b->{age} } @group;
Perl 5: codegolf
print "$_->{name} ($_->{age})\n" for sort { $a->{age} <=> $b->{age} } ( { name => 'Bob', age => 33 }, { name => 'Chris', age => 16 }, { name => 'Ash', age => 23 }, );
%s=qw/Bob 33 Chris 16 Ash 23/;print"$_ ($s{$_})\n"for sort{$s{$a}<=>$s{$b}}keys%s
Thats why I don't program SHITTY languages like Ruby and Symta.
Name:
Anonymous2014-12-27 1:55
~le failed code tag~
Symta is verbose, compared to Perl.
Perl 5: Modern Perl 5 way use strict; use warnings; use 5.18.0;
{ package Person; use Moose;
use overload '""' => sub { $_[0]->name . ' (' . $_[0]->age . ')' }; has name => is => 'rw', default => sub { 'Anonymous' }; has age => is => 'rw', default => sub { 1337 }; }
my @group = ( Person->new({ name => 'Bob', age => 33 }), Person->new({ name => 'Chris', age => 16 }), Person->new({ name => 'Ash', age => 23 }), );
say for sort { $a->age <=> $b->age } @group;
Perl 5: Blessed way use strict; use warnings; use 5.18.0;
{ package Person; use strict; use warnings;
use overload '""' => sub { "$_[0]->{name} ($_[0]->{age})" };
sub new { my ($class, $args) = @_; bless { name => ($args->{name} // 'Anonymous'), age => ($args->{age} // 0) }, $class; } }
my @group = ( Person->new({ name => 'Bob', age => 33 }), Person->new({ name => 'Chris', age => 16 }), Person->new({ name => 'Ash', age => 23 }), );
say for sort { $a->{age} <=> $b->{age} } @group;
Perl 5: codegolf print "$_->{name} ($_->{age})\n" for sort { $a->{age} <=> $b->{age} } ( { name => 'Bob', age => 33 }, { name => 'Chris', age => 16 }, { name => 'Ash', age => 23 }, );
>>40 Props for going for an ACME module. I thought you were going to counter with use ACME::prog1419189250 that does everything in a BEGIN block to force a tie.