-
-
Save MacoTasu/ec71b0779b0ef95757fa to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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