Skip to content

Instantly share code, notes, and snippets.

@MacoTasu
Forked from hisaichi5518/mouse.pl
Last active August 29, 2015 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MacoTasu/ec71b0779b0ef95757fa to your computer and use it in GitHub Desktop.
Save MacoTasu/ec71b0779b0ef95757fa to your computer and use it in GitHub Desktop.
package Result::User {
use strict;
use warnings;
use utf8;
sub new { bless {}, shift }
sub to_model {
my $self = shift;
Model::User->new(user => $self);
}
};
package Model::User {
use strict;
use warnings;
use utf8;
use Mouse;
has user => (
is => "rw",
isa => "Result::User",
required => 1,
);
has guild_model => (
is => "rw",
isa => "Model::User::Guild",
default => sub {
my $self = shift;
Model::User::Guild->new(user_model => $self);
},
lazy => 1,
);
no Mouse;
};
package Model::User::Guild {
use strict;
use warnings;
use utf8;
use Mouse;
use Data::Dumper;
has user_model => (
is => "rw",
isa => "Model::User",
required => 1,
weak_ref => 1,
);
no Mouse;
sub join {
my $self = shift;
my $user = Result::User->new;
{
# guild_modelのuser_modelには、ちゃんとModel::Userのオブジェクトが入っている
warn Dumper $user->to_model->guild_model;
# $VAR1 = bless( {
# 'user_model' => bless( {
# 'guild_model' => $VAR1,
# 'user' => bless( {}, 'Result::User' )
# }, 'Model::User' )
# }, 'Model::User::Guild' );
};
{
# 変数にいれるとguild_modelのuser_modelがundefになる。
my $guild_model = $user->to_model->guild_model;
warn Dumper $guild_model;
# $VAR1 = bless( {
# 'user_model' => undef
# }, 'Model::User::Guild' );
};
{
# user_modelを一旦変数に落とすと正常になる
my $user_model = $user->to_model;
my $guild_model = $user_model->guild_model;
warn Dumper $guild_model;
# $VAR1 = bless( {
# 'user_model' => bless( {
# 'guild_model' => $VAR1,
# 'user' => bless( {}, 'Result::User' )
# }, 'Model::User' )
# }, 'Model::User::Guild' );
};
}
};
Result::User->new->to_model->guild_model->join;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment