ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

初めてのRubyを読む その36 7.3

2011-10-25 16:56:04 | Ruby
「初めてのRuby」を読むの続き

7章 メソッド
7.3 ブロック付きメソッド

から




■7.3 ブロック付きメソッド

・メソッド呼び出しにはブロックを付加できる
  →引数とともにメソッドに引き渡される

・ブロック付きメソッド呼び出しの主な用途は3つ
  →ループの抽象化:2章
   ブロックへの機能追加。典型的にはリソース管理:5章
   コールバック関数・イベントハンドラ:Arrays.sort

・ブロックの数
  ・複数のブロックが必要になる場合はほとんどないことが
   歴史的に知られている
    →どうしても必要な場合は、Proc.newやlambdaを使う




■7.3.1 クロージャーとしてのブロック

・ブロックがクロージャーとして振舞っている
  →ブロック内に現れる自由変数はブロックの外部環境に従う
  →ブロックの外と中で変数が共有され、ブロック内で変数を
   書き換えると、外部にも影響する





■7.3.2 ブロック引数とブロックローカル変数
・メソッドに渡したブロックはメソッドから呼び返されるときに
 引数を受け取ることが出来る
・ブロックは独自のローカル変数をもちことが出来る
・Ruby1.9で文法が整理された
  →工法互換性が損なわれている

・Ruby1.9の場合
  ブロック付き呼び出しは、新しい変数スコープを用意する
  ブロック引数は、外部のローカル変数とは独立
    →同名の変数があっても、互いに影響しない
  ブロック変数に続けて、任意のブロックローカル変数を宣言することが出来る
   →これらの変数は、外部の同名のローカル変数とは独立したものになる
   →ブロック内の初出のローカル変数は、宣言しなくてもブロックローカル

・Ruby1.8
  ブロック引数はローカル変数と独立していない
   →同名のローカル変数があると、上書きする
   →ブロックローカルの宣言構文はない
   →初出のローカル変数がブロックローカルになるのは同じ

・以下の2点に気をつければ、1.8と1,9の混乱はされられる
  外部のローカル変数と同名のブロック引数を用いない
  外部で既出のローカル変数はブロック内外で共有(クロージャー)





■7.3.3 ブロック付きメソッドの定義
・特別な方法はなく、def式を用いて定義
・yield式は、メソッド内から呼び出し側のブロックをコールバックする構文
 →後に0個以上の式を取ることが出来る
 →それらの式の値をブロック呼び出し時に、ブロック引数として渡す
・イテレーター内のyield
 yieldを利用する点を除いては、ブロックつきメソッドは普通のメソッドと
 変わらない
   メソッド本体では任意の処理を行える
   どんな形でyieldを実行しても良い

・Enumeration
 Ruby1.9では、ブロックを付けずにイテレータを呼び出すと、Enumerable::Enumerator
 オブジェクトが返る
 ユーザー定義のイテレーターはそうはいかない
   →自前で明示的に実装する

・yield式は、ブロックの評価値を返す
  →ブロックをつけていない場合は例外発生




■7.3.4 Proc
・受け取ったブロックを変数に代入したり、他のメソッド呼び出しの引数にしたい
  →呼び出し側のブロックをオブジェクトとして取得したい
  →仮引数リストの最後に&で修飾された引数を置く
     →この引く数に呼び出し側のブロックをあらわすProcオブジェクトが
      格納される
・ブロックをProc化してためておいて後で使うのもよくある
・Procをコードブロックの代わりに引き渡す
  →&で修飾して、引数リストの最後におく

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

初めてのRubyを読む その35 7.2

2011-10-25 15:59:16 | Ruby
「初めてのRuby」を読むの続き

7章 メソッド
7.2 メソッドの定義

から




■7.2.1 def式
・メソッドを定義するにはdef式を使う
・メソッド内には任意の式を並べることが出来、
 メソッドが呼ばれると実行
   →メソッドの本体
・メソッド内で最後に評価された式の値が戻り値になる




■7.2.2 return
・メソッド内から陽に戻り値を返すにはreturnを用いることが出来る
・戻り値の式は省略可能
  →省略してreturnだけ書くと、nilが返る
・returnは必須でない
  →returnに出会わずメソッド末尾に到達すると
   最後の式の値が戻り値

・多値の返却
 returnの後に、カンマ区切りで複数の式を書くことが出来る
  →配列が返る
 呼び出し側では、多重代入の要領で多値として受け取る
 多値を返す場合は、return必要

・値を返さないメソッドは存在しない
  →返り値に使い道がない場合はnilを返す




■7.2.3 デフォルト値
・引数にデフォルト値を指定できる
 →呼び出し時に指定しないとデフォルト値適用

・デフォルト値を持っている仮引数のことを省略可能な引数という
 →デフォルト値が定義されていない引数を省略するとエラー
 →Ruby1.8においては、省略可能な引数より後に
  省略不能な引数が存在してはならない

・デフォルト値の評価コンテキスト
 デフォルト値には任意の式を指定できる
  →呼び出し時にデフォルト値が必要になると、毎回評価
     →レシーバーのコンテキストで評価される
     →式を都度評価する:メソッド定義時には確定しない




■7.2.4 可変長引数
・呼び出すケースことに引数の数が異なるもの
  →pなど
 仮引数の中のいずれか1つを、可変長引数の受け皿にすることができる
  →*をつける:配列として割り当てられる

・スコープの発生
 メソッド本体のローカル変数スコープは外部と完全に独立している
 →メソッド本体の自由変数が外部環境によって解決されることはない
 →クロージャーとは異なる。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

「au版iPhone 4Sで初期不良(?)」という話が書いてあるブログ

2011-10-25 12:08:04 | Weblog
ここのブログ

au版iPhone 4Sで初期不良(?)発生のため交換
http://blog.livedoor.jp/whats_my_scene/archives/51768357.html

の話(以下太字は上記ブログより引用)


 今日、突然、au版iPhone 4Sで3G回線からのネット接続が出来なくなり、結局は端末を交換することになった。

という書き出しで始まり、以下、経緯が書いてある。
まあ、それについては、そちらのブログを見てもらうとして、
結局


au版iPhone 4Sのみで同様のトラブルが発生しており、原因は不明で現在調査中とのこと。同じ症状が出た場合、今のところは端末交換でしか対応できない由。


とのことらしい。
早く原因を解明しないと、お客さんに逃げられてしまうんではないだろうか?au

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする