[ruby-list:49255] Re: [ruby-list:49254] forループ内の変数のスコープに関して

From: 小柳真太 <yancya@...>
Date: 2013-03-06 06:36:09 UTC
List: ruby-list #49255
村上さん
こんにちは
小柳と申します

> ループ内で使用される変数の有効範囲をループ内だけに限定させることはできないのでしょうか?
そういう挙動を求めるとき、私なら下記の様に書きます。
#----------------
a=4

(0..10).each do |a|
  print "a="<<a.to_s<<"\n"
end

p a
#----------------
do ... end や { } によるブロックをつかうと、その内側でのみ有効なブロック変数を使う事ができます。

参考 URL
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fcontrol.html#for


2013年3月6日 15:20 村上 友洋 <tomohiroz@icloud.com>:

> 初めまして。
> メーリングリストに初投稿させていただきます 村上 と申します。
>
> 変数のスコープに関して質問というか気になる点がありましたのでこのメールを出させていただきました。
> 以下のコードを実行したところ
> #----------------
> a=4;
>
> for a in 0..10
>         print "a="<<a.to_s<<"\n";
> end;
>
> p a;
> #----------------
> #実行結果
> $/usr/local/bin/ruby -v
> ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.2.1]
> $/usr/local/bin/ruby sample.rb
> a=0
> a=1
> a=2
> ~
> a=8
> a=9
> a=10
> 10
>
>
> という結果が出力されました。自分としては変数aの最後の出力値は4であることを期待していたのですが、10となってしまいました。forループ内で使用される変数の有効範囲をループ内だけに限定させることはできないのでしょうか?
> 似たようなことをC言語で組んだところforループ内の変数の宣言の仕方によって結果が異なりました。
> #-------------------
> int a=4;
> for(int a=0;a<10;a++){
>         printf("a=%d\n",a);
> }
>
> printf("%d\n",a);
> #-------------------
> #実行結果
> a=0
> a=1
> a=2
> ~
> a=8
> a=9
> 4
>
> #--------------------
> int a=4;
> for(a=0;a<10;a++){
>         printf("a=%d\n",a);
> }
>
> printf("%d\n",a);
> #---------------------
> #実行結果
> a=0
> a=1
> a=2
> ~
> a=8
> a=9
> 10
>
>


-- 
:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:
小柳 真太 yancya@upec.jp http://upec.jp
:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:

In This Thread