Re: Rubyで静的型


#1

$B$3$N>l9g!"$3$NNc$G$O4JC1$+$b$7$l$^$;$s$,!"$?$H$($P(Bvar$B$,JL$N%a%=%C%I(B
$B$KEO$7$?>l9g$J$I(Bvar$B$,8F$S=P$9$G$"$m$&%a%=%C%I$N=89g$rF@$k$N$O!“0lHLE*(B
$B$K:$Fq$^$?$OIT2DG=$G$”$k$H;W$$$^$9!#(B

$B$=$3$O7??dO@$r;HMQ$7$F!"<+F0HF2=$5$l$?7?$,EAGE$7!"EAGE@h$G;HMQ$7$?(B
$B%a%=%C%I$b%-%c%C%W%F!<%V%k$N%a%s%P!<$H$9$l$PNI$$$N$G$O$J$$$G$7$g$&$+!)(B

$B$^$?!"JQ?t$K$I$s$JCM$,F~$j$&$k$N$+@EE*$K3NDj$5$;$k$N$O$=$l$J$j$K(B
$B:$Fq$G$9!#(B

$B$3$l$ODK$$!#5$$E$-$^$;$s$G$7$?!#$,!“9M$($F$_$k$H!&!&!&(B
$BF0E*$J>r7o$N$b$H!”(Bvar$B$KBeF~$5$l$?$b$N$O<+F0HF2=$NBP>]$H$9$k!"(B
$B$HC1=c$K9M$($k$N$G$OBLL$G$9$+!&!&!&!)(B
$B5U$K8@$($P!"@EE*$J>r7o$N$b$H(Bvar$B$KBeF~$5$l$?(BX, Y$B$K$O$=$l$>$l(B
$B@EE*$KB+G{$G$-$kLu$G!#%3!<%I$r%3%s%Q%$%k;~$K<B9T$7$?$H$7$F!#(B

$B!!8F$S=P$7$9$k!#(B
$B;d$O@lLg2H$G$O$J$/!“L53X$J?M4V$J$N$G!”$3$NItJ,$O$h$/M}2r$G$-$^$;$s(B
$B$G$7$?!#$3$N$h$&$K$9$k$H!"@EE*B+G{$G$+$D7?;XDj$N$J$$%@%C%/%?%$%T%s%0$,(B
$B$G$-$k$N$G$7$g$&$+!)65$($F$$$?$@$1$?$i9,$$$G$9!#(B


#2

$B;01:$G$9(B

$B$=$3$O7??dO@$r;HMQ$7$F!"<+F0HF2=$5$l$?7?$,EAGE$7!"EAGE@h$G;HMQ$7$?(B
$B%a%=%C%I$b%-%c%C%W%F!<%V%k$N%a%s%P!<$H$9$l$PNI$$$N$G$O$J$$$G$7$g$&$+!)(B

$B$=$l$b2DG=$G$7$g$&$7!"$b$C$H$$$($P%W%m%0%i%`Cf$K8=$l$k$9$Y$F$N%a%=%C%I$N(B
$BI=$r:n$C$F$7$^$($P$$$$$+$b$7$l$^$;$s!#(B
$BLdBj$O!"I,MW$J%a%b%jNL$^$?$O%F!<%V%k$r$D$/$k7W;;NL$G$9!#(B
$B%F!<%V%k$r8=<BE*$JBg$-$5$H;~4V$G:n$k$N$O$d$O$j:$Fq$+$H;W$$$^$9!#(B

$B$3$l$ODK$$!#5$$E$-$^$;$s$G$7$?!#$,!“9M$($F$_$k$H!&!&!&(B
$BF0E*$J>r7o$N$b$H!”(Bvar$B$KBeF~$5$l$?$b$N$O<+F0HF2=$NBP>]$H$9$k!"(B
$B$HC1=c$K9M$($k$N$G$OBLL$G$9$+!&!&!&!)(B
$B5U$K8@$($P!"@EE*$J>r7o$N$b$H(Bvar$B$KBeF~$5$l$?(BX, Y$B$K$O$=$l$>$l(B
$B@EE*$KB+G{$G$-$kLu$G!#%3!<%I$r%3%s%Q%$%k;~$K<B9T$7$?$H$7$F!#(B

$B$$=$i$/!"@EE$J>r7o$N>r7oJ,4t$C$F>r7o%3%s%Q%$%k$H$+%G%P%C%0L\E*$H$+(B
$BFC<l$J>l9g$7$+$J$$$H;W$$$^$9!#$=$7$F!"IaDL$A$g$C$H5$$N$-$$$?%3%s%Q%$%i$J$i(B
$B@EE*$J>r7o$NJ,4t$O>r7o$,L5$$$b$N$H$7$F%3%s%Q%$%k$7$^$9!#(B

$B;d$O@lLg2H$G$O$J$/!“L53X$J?M4V$J$N$G!”$3$NItJ,$O$h$/M}2r$G$-$^$;$s(B
$B$G$7$?!#$3$N$h$&$K$9$k$H!"@EE*B+G{$G$+$D7?;XDj$N$J$$%@%C%/%?%$%T%s%0$,(B
$B$G$-$k$N$G$7$g$&$+!)65$($F$$$?$@$1$?$i9,$$$G$9!#(B

$B?=$7Lu$"$j$^$;$s!#$3$l$O@EE7?IU$1$NOC$G$O$J$/!"F0E7?IU$1$G$$$+$KB.$/(B
$BF0$/%3!<%I$rF@$k$+$NOC$G$9!#(BChrome$B$d(BFirefox$B$GF0$/(BJS$B$N(BJIT$B%3%s%Q%$%i$G$O(B
$B$3$N<j$N%F%/%K%C%/$,;H$o$l$F$$$k$O$:$G$9!#(B


#3

$B:4!9LZ$G$9!#(B

$B;01:$G$9(B

$B$=$3$O7??dO@$r;HMQ$7$F!"<+F0HF2=$5$l$?7?$,EAGE$7!"EAGE@h$G;HMQ$7$?(B
$B%a%=%C%I$b%-%c%C%W%F!<%V%k$N%a%s%P!<$H$9$l$PNI$$$N$G$O$J$$$G$7$g$&$+!)(B

$B$=$l$b2DG=$G$7$g$&$7!"$b$C$H$$$($P%W%m%0%i%`Cf$K8=$l$k$9$Y$F$N%a%=%C%I$N(B
$BI=$r:n$C$F$7$^$($P$$$$$+$b$7$l$^$;$s!#(B
$BLdBj$O!"I,MW$J%a%b%jNL$^$?$O%F!<%V%k$r$D$/$k7W;;NL$G$9!#(B
$B%F!<%V%k$r8=<BE*$JBg$-$5$H;~4V$G:n$k$N$O$d$O$j:$Fq$+$H;W$$$^$9!#(B

$B$=$&$J$s$G$9$+!#$7$g$;$s?M$,<j$G=q$$$?NL$N%W%m%0%i%`!#(B
$B%3%s%T%e!<%?$J$i$"$C$H$$$&4V$K=hM}$G$-$k$H;W$C$?$N$G$9$,!#(B
$B7??dO@$NEAGE$rD4$Y$k$N$J$i==J,2DG=$HF’$s$@$N$G$9$,!&!&!&!#(B

$B$3$l$ODK$$!#5$$E$-$^$;$s$G$7$?!#$,!“9M$($F$_$k$H!&!&!&(B
$BF0E*$J>r7o$N$b$H!”(Bvar$B$KBeF~$5$l$?$b$N$O<+F0HF2=$NBP>]$H$9$k!"(B
$B$HC1=c$K9M$($k$N$G$OBLL$G$9$+!&!&!&!)(B
$B5U$K8@$($P!"@EE*$J>r7o$N$b$H(Bvar$B$KBeF~$5$l$?(BX, Y$B$K$O$=$l$>$l(B
$B@EE*$KB+G{$G$-$kLu$G!#%3!<%I$r%3%s%Q%$%k;~$K<B9T$7$?$H$7$F!#(B

$B$$=$i$/!"@EE$J>r7o$N>r7oJ,4t$C$F>r7o%3%s%Q%$%k$H$+%G%P%C%0L\E*$H$+(B
$BFC<l$J>l9g$7$+$J$$$H;W$$$^$9!#$=$7$F!"IaDL$A$g$C$H5$$N$-$$$?%3%s%Q%$%i$J$i(B
$B@EE*$J>r7o$NJ,4t$O>r7o$,L5$$$b$N$H$7$F%3%s%Q%$%k$7$^$9!#(B

$B$A$g$C$H;d$N@bL@$,0-$+$C$?$G$9!#;01:$5$s$,8@$&$K(B
$B!VJQ?t$K$I$s$JCM$,F~$j$&$k$N$+@EE*$K3NDj$5$;$k$N$O$=$l$J$j$K(B
$B:$Fq!W$H$N$3$H$G$9$,!“F0E*$J>r7o!J%3%s%Q%$%k;~$=$&$HJ,$+$k$O$:!K$N$b$H$G$N$”$k(B

$BJQ?t$X$NBeF~$rNs5s$7$?$b$N!J%3!<%I$N$"$kCOE@$^$G$K!K$,!VJQ?t$K$I$s$JCM$,F~$j(B
$B$&$k$N$+!W$K$J$l$k$H;W$$$^$9!#$?$@$7$=$l$O%3!<%I$NCOE@$,0c$($P0c$C$?(B
$B$b$N$K$J$k$N$G!"3N$+$K;01:$5$s$,8@$&$h$&$K$=$l$J$j$K:$Fq$+$b$7$l$^$;$s!#(B

$B;d$O@lLg2H$G$O$J$/!“L53X$J?M4V$J$N$G!”$3$NItJ,$O$h$/M}2r$G$-$^$;$s(B
$B$G$7$?!#$3$N$h$&$K$9$k$H!"@EE*B+G{$G$+$D7?;XDj$N$J$$%@%C%/%?%$%T%s%0$,(B
$B$G$-$k$N$G$7$g$&$+!)65$($F$$$?$@$1$?$i9,$$$G$9!#(B

$B?=$7Lu$"$j$^$;$s!#$3$l$O@EE7?IU$1$NOC$G$O$J$/!"F0E7?IU$1$G$$$+$KB.$/(B

$BF0$/%3!<%I$rF@$k$+$NOC$G$9!#(BChrome$B$d(BFirefox$B$GF0$/(BJS$B$N(BJIT$B%3%s%Q%$%i$G$O(B

$B$3$N<j$N%F%/%K%C%/$,;H$o$l$F$$$k$O$:$G$9!#(B

$B$=$&$G$7$?$+!#;d$b<+:n$N8@8l$r9M$($F$$$F!"8@8l;EMM$O9M$($k$N$G$9$,<BAu$NJ}(B
$B$^$G<j$,2s$i$:$=$&$$$C$?$3$H$K$OAB$$$N$G$9!#(B

$B$G$O(B


#4

$B:4!9LZ$G$9!#(B

$B;01:$G$9(B

$B$=$&$J$s$G$9$+!#$7$g$;$s?M$,<j$G=q$$$?NL$N%W%m%0%i%`!#(B
$B%3%s%T%e!<%?$J$i$"$C$H$$$&4V$K=hM}$G$-$k$H;W$C$?$N$G$9$,!#(B
$B7??dO@$NEAGE$rD4$Y$k$N$J$i==J,2DG=$HF’$s$@$N$G$9$,!&!&!&!#(B

$B7??dO@$O$A$g$C$HB-$rF’$_30$9$H7W;;NL$,GzH/$9$kN`$NLdBj$J$N$G(B
$B7k9=BgJQ$G$9!#(B

$BNc$($P$I$s$J$H$-$K7W;;NL$,GzH/$9$k$N$+!“65$($F$b$i$C$F$b$h$m$7$$(B
$B$G$7$g$&$+!#!J%M%C%H$G8!:w$7$F$bNI$/J,$+$j$^$;$s$G$7$?!K(B
$B$b$C$H$b;d$KM}2r$G$-$kG=NO$,$”$k$+$bLdBj$G$9$,!#(B
$B;d$N9=A[Cf$N<+:n8@8l$O!"$3$N7?$N<+F0HF2=$N5!9=$KA4LLE*$K(B
$B0MB8$7$F$$$k$N$G!"$G$-$J$$$HBgJQ:$$k$N$G$9!#(B

$B$I$s$JCM$,F~$j$&$k$+$O3N$+$K7W;;2DG=$G$9$,!"$3$l$b$?$/$5$sJ,4t$,$"$k>l9g(B
$B$9$02DG=@-$,G|Bg$JJ*$K$J$j$^$9!#(B
$B$"$H!“6&DL$9$k%a%=%C%I$NI=$r:n$k$N$b7k9=BgJQ$=$&$G$9!#(B
$B$?$@!”$3$N<j$NLdBj$ONI$$%"%k%4%j%:%`$,$"$k$b$N$J$N$G!";d$,CN$i$J$$$@$1(B
$B$H$$$&2DG=@-$b$9$4$/$"$j$^$9!#(B

$B$3$l$b;d$N8@8l$K$H$C$F$NLdBjE@$G$9$,!“NI$$%”%k%4%j%:%`$,$"$k$@$m$&$H$$$&(B
$B$3$H$G3Z4QE*$K9M$($k$3$H$K$7$^$9!#(B

$B$=$&$G$7$?$+!#;d$b<+:n$N8@8l$r9M$($F$$$F!"8@8l;EMM$O9M$($k$N$G$9$,<BAu(B
$B$NJ}(B
$B$^$G<j$,2s$i$:$=$&$$$C$?$3$H$K$OAB$$$N$G$9!#(B

$B<BAu$O<BAu$GLLGr$$$G$9$+$i$M!#(B
$B0lHVFq$7$$$N$O!"<BAu$rCN$C$?>e$G<BAu$K$H$i$o$l$J$$8@8l;EMM$r9M$($k$3$H(B
$B$8$c$J$$$G$7$g$&$+(B

$B8@8l$N;EMM$r9M$($k$N$O;d$K$H$C$F$H$F$bFq$7$$:n6H$G$9!#(B
$B<BAu$,$3$l$h$jFq$7$/$J$$$3$H$r5’$k$P$+$j$G$9!#(B
$B0J>e!"<+:n8@8l$K$D$$$F$NOC$K$J$C$F$7$^$$$^$7$?$,!"$3$N7?$N<+F0HF2=$N(B
$B5!9=$,$&$^$/9T$1$P!"(BRuby$B$K$b1~MQ2DG=$G$"$k$b$N$H$7$F!"$3$3$G$NOC$rB3$1(B
$B$5$;$F$/$@$5$$!#(B–>$B$_$J$5$^(B


#5

$B;01:$G$9(B

$B$=$&$J$s$G$9$+!#$7$g$;$s?M$,<j$G=q$$$?NL$N%W%m%0%i%`!#(B
$B%3%s%T%e!<%?$J$i$"$C$H$$$&4V$K=hM}$G$-$k$H;W$C$?$N$G$9$,!#(B
$B7??dO@$NEAGE$rD4$Y$k$N$J$i==J,2DG=$HF’$s$@$N$G$9$,!&!&!&!#(B

$B7??dO@$O$A$g$C$HB-$rF’$_30$9$H7W;;NL$,GzH/$9$kN`$NLdBj$J$N$G(B
$B7k9=BgJQ$G$9!#(B

$B$A$g$C$H;d$N@bL@$,0-$+$C$?$G$9!#;01:$5$s$,8@$&$K(B
$B!VJQ?t$K$I$s$JCM$,F~$j$&$k$N$+@EE*$K3NDj$5$;$k$N$O$=$l$J$j$K(B
$B:$Fq!W$H$N$3$H$G$9$,!“F0E*$J>r7o!J%3%s%Q%$%k;~$=$&$HJ,$+$k$O$:!K$N$b$H(B
$B$G$N$”$k(B
$BJQ?t$X$NBeF~$rNs5s$7$?$b$N!J%3!<%I$N$"$kCOE@$^$G$K!K$,!VJQ?t$K$I$s$JCM(B
$B$,F~$j(B
$B$&$k$N$+!W$K$J$l$k$H;W$$$^$9!#$?$@$7$=$l$O%3!<%I$NCOE@$,0c$($P0c$C$?(B
$B$b$N$K$J$k$N$G!"3N$+$K;01:$5$s$,8@$&$h$&$K$=$l$J$j$K:$Fq$+$b$7$l$^$;$s!#(B

$B$I$s$JCM$,F~$j$&$k$+$O3N$+$K7W;;2DG=$G$9$,!"$3$l$b$?$/$5$sJ,4t$,$"$k>l9g(B
$B$9$02DG=@-$,G|Bg$JJ*$K$J$j$^$9!#(B
$B$"$H!“6&DL$9$k%a%=%C%I$NI=$r:n$k$N$b7k9=BgJQ$=$&$G$9!#(B
$B$?$@!”$3$N<j$NLdBj$ONI$$%"%k%4%j%:%`$,$"$k$b$N$J$N$G!";d$,CN$i$J$$$@$1(B
$B$H$$$&2DG=@-$b$9$4$/$"$j$^$9!#(B

$B$=$&$G$7$?$+!#;d$b<+:n$N8@8l$r9M$($F$$$F!"8@8l;EMM$O9M$($k$N$G$9$,<BAu(B
$B$NJ}(B
$B$^$G<j$,2s$i$:$=$&$$$C$?$3$H$K$OAB$$$N$G$9!#(B

$B<BAu$O<BAu$GLLGr$$$G$9$+$i$M!#(B
$B0lHVFq$7$$$N$O!"<BAu$rCN$C$?>e$G<BAu$K$H$i$o$l$J$$8@8l;EMM$r9M$($k$3$H(B
$B$8$c$J$$$G$7$g$&$+(B


#6

$B:4!9LZ$G$9!#(B
$BJVEz$"$j$,$H$&$4$6$$$^$7$?!#(B
$B;d$b$3$l$r5!$K7??dO@$N<BAu$K$D$$$F$8$C$/$j9M$($F$_$h$&$H;W$$$^$9!#(B
$B$I$&$b$"$j$,$H$&$4$6$$$^$7$?!#(B


#7

$B;01:$G$9(B

$BNc$($P$I$s$J$H$-$K7W;;NL$,GzH/$9$k$N$+!“65$($F$b$i$C$F$b$h$m$7$$(B
$B$G$7$g$&$+!#!J%M%C%H$G8!:w$7$F$bNI$/J,$+$j$^$;$s$G$7$?!K(B
$B$b$C$H$b;d$KM}2r$G$-$kG=NO$,$”$k$+$bLdBj$G$9$,!#(B
$B;d$N9=A[Cf$N<+:n8@8l$O!"$3$N7?$N<+F0HF2=$N5!9=$KA4LLE*$K(B
$B0MB8$7$F$$$k$N$G!"$G$-$J$$$HBgJQ:$$k$N$G$9!#(B
$B;d$,:n$C$?7??dO@4o$G$O%V%m%C%/(B($B9b3,4X?t(B)$B$N7??dO@$,=E$+$C$?$G$9!#(B
$B$3$N<j$N?dO@$G$O7?IU$1$,<}B+$9$k$^$G2?EY$G$b7??dO@$r7+$jJV$9(B
$BI,MW$,$"$j$^$9!#(B
$B;d$O$"$^$jCY$$$H46$8$J$+$C$?$G$9$,!"(BTaPL$B$K$h$l$P!":F5"7?(B(List$B$d(B
Tree$B$J$I$N<+J,<+?H$X$N%]%$%s%?$r4^$s$@7?(B)$B$N?dO@$G;X?t%*!<%@$K$J$k(B
$B>l9g$b$"$k$H$H$N$3$H$G$9!#(B