心はいつも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

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

  関連記事

画面キャプチャ系extension

現在メインブラウザはchromeを利用しています。画面キャプチャextensio …

RailsTutorial4.0を高速で復習する。またまた5.1.2章の途中から。

RailsTutorial4.0を高速で復習する。5.1.2章の途中から。です。 …

no image
Rails 3.2と4.0、複数バージョンをインストールする

Rubyを複数バージョン入れて切り替えて使える事を確認しました。次はRailsを …

詳解 Objective-C 2.0 第3版

Rubyの言語仕様を勉強する傍ら、Objective-Cも言語仕様ベースで勉強し …

Mac miniのメモリを自力で16Gに増設しました

Mac miniとDellの27インチIPS液晶、とても快適です。もっと快適にす …

no image
MavericksアップデートしRuby2.0+Rails4.0.2にversion upする

何を今さら感ですが、MacはAirとMiniの2台持ちです。Airのほうを人柱と …

文字化けもするし、、

自作テンプレ作ったはいいですが、問題が、、。 関連しそうな記事 iTunesをM …

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

9.3すべてのユーザーを表示する、です。 いろいろ細かい実装するまえにこれやるべ …

herokuのWe’re sorry, but something went wrong.に苦しんだ

Rails3.2環境に戻してアプリを作ろうとしています。 herokuにpush …

no image
Rubyの<< には3つの用法あり。

先週の#yokohamarbペアプロ画面をみていて