心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

パーフェクトRuby 2章Rubyの基礎 2-2 変数と定数

   


p47
2-2-1 ローカル変数
スコープは
・ブロック内
・メソッド定義内
・クラス・モジュール定義内
・トップレベル内
で納得。このうち、
メソッド定義内からトップレベルの変数は参照できないけど、
ブロック定義内からトップレベルの変数が参照できる例が紹介されている。

んじゃあ、メソッドの中にブロックからトップレベルの変数は参照できるんかい?
たぶんできない。メソッドに引数の形で渡してあげる必要があると思う。

できなかったよ。エラーとなる箇所は#でコメントアウトしたソースが以下。

top = "Im on Top level"
mountains = ["evelest", "fuji"]

def display
  puts top #メソッド内からトップレベル変数の参照<=できない
end

mountains.each do |yama| #yamaがブロック内変数
  puts top + " of #{yama}" #ブロック内からトップレベルの参照 <=できる
end

# puts yama #ブロック外からブロック内変数の参照 <=できない

jojos = ["Jonathan", "Joseph", "Jotaro", "Jorin"]

def hello(names)
  names.each do |name|
    puts "Hello, #{name}"
  end
end

hello(jojos)

def konichiwa(names)
  names.each do |name|
#    puts top + ", #{name}" #メソッド内のブロック内からトップレベルの参照 <=できない
    puts "Konichiwa, #{name}"
  end
end

konichiwa(jojos)

#=>
Im on Top level of evelest
Im on Top level of fuji
Hello, Jonathan
Hello, Joseph
Hello, Jotaro
Hello, Jorin
Konichiwa, Jonathan
Konichiwa, Joseph
Konichiwa, Jotaro
Konichiwa, Jorin

2-2-2 グローバル変数

グローバル変数のスコープは非常に広い

と、なんともアバウトな説明。何処で定義しても、何処からでも参照できる。必要なければ使うべきではないと。
グローバル変数は頭に$をつける。

2-2-3 定数
定数は大文字で書き始める。
ここで驚き、定数には再代入ができる。って全然定数じゃないやんか。

TEISU = "teisu dayo"
puts TEISU

TEISU = "kawattayo"
puts TEISU

#=>
teisu dayo
teisu.rb:4: warning: already initialized constant TEISU
teisu.rb:1: warning: previous definition of TEISU was here
kawattayo

wariningは出るものの実行できてしまう。ひどい。

メソッドの中で定数の定義はできない。そりゃそうだ。それは変数だ。なので大文字で始まる定数つか変数をメソッド内で定義すると文法エラーになる。

次は2-3 条件分岐と真偽値

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

no image
retweetボタンを追加してみました

最近いろんなブログで見かけるretweetボタン。ブログのエントリーについている …

no image
Mavericksでruby2.0 rails4.0.0のGem

MacBookAirにMavericksインストールして初めてのrails ne …

MacBookAirの容量が足りない

当ブログairpucciで人気なのがMacBookAirに関するエントリ。ありが …

MacにGUIのSQLite3クライアントを入れる。

ターミナルからコマンドたたけばいいだけですが、DBスキーマをちょっと確認したいと …

no image
RailsTutorial4.0を高速で復習する。10.1.4章。

10.1.4マイクロポストを改良する、です。 has_many関連付けしたので、 …

ジョジョ専用kindle fire HDの電源が入らない!

電源が入らない!MacBookAirが真っ黒になりました。とか、 iPhoneの …

no image
Google Appsで問い合わせフォームを作りました

とっても簡単でした。Google Appsでこのブログに問い合わせフォームを設置 …

no image
RailsTutorial4.0を高速で復習する。10.3章。

10.3マイクロポストを操作する、です。 仕様の理解 ポストはユーザーだけが投稿 …

パーフェクトRuby 2章Rubyの基礎 2-8 様々な代入式

p66 2-8-1 多重代入 まとめて代入する横着なやり方。 a,b = 1,2 …

パーフェクトRuby 2章Rubyの基礎 2-6 モジュール

p57 2-6 モジュール 2-6-1モジュールの定義式 モジュールはインスタン …