Ruby Gold

# 出題範囲

### 実行環境

* コマンドラインオプション
([ref](http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2frubycmd.html))

|コマンドラインオプション|指定した時の動作|
|:---|:---|
|-h|ヘルプを表示する|
|-v|バージョンを表示する|
|-c|指定されたファイルが文法的に正しいか確認する|
|-e|指定された文字列をRubyプログラムとして実行する|
|-w|冗長モードでの実行|
|-W0,-W1,-W2,-W|出力範囲を指定した冗長モードでの実行|
|-l|$LOAD_PATHに指定された文字列を追加する|
|-r|スクリプト実行前に指定されたファイルを実行する|
|-d|デバッグモードで実行する|

* 組み込み変数/定数

http://qiita.com/mnuma/items/e9a7e4c2e82053157f61

|識別子|概要|スコープ|
|:---|:---|:---|
|\$stdout,\$>|標準出力。初期値はSTDOUT|グローバル|
|\$stderr|標準エラー出力。初期値はSTDERR|グローバル|
|\$stdin|標準入力。初期値はSTDIN|グローバル|
|\$SAFE|現在のスレッドのセーフレベルを表す整数|ローカル|
|\$!|最後に発生した例外オブジェクト|ローカル|
|\$@|最後に発生した例外のバックトレースを表す配列|ローカル|
|\$$|実行中のRubyプロセスのプロセスID|ローカル|
|\$?|最後に終了した子プロセスのプロセスID|ローカル|
|\$LOADED_FEATURES,\$"|Kernel.#requireによるロード済みファイルの配列|グローバル|
|\$~|最後に成功した正規表現マッチに関する情報（MatchDataオブジェクト）|ローカル|
|\$1,\$2,\$n...|最後に成功した正規表現マッチでn番目の括弧にマッチした値（nは正の整数）|ローカル|
|\$+|最後に成功した正規表現マッチで最後の括弧にマッチした値|ローカル|
|\$&|最後に正規表現でマッチした文字列|ローカル|
|\$'|最後に正規表現でマッチした文字列よりも後ろの文字列|ローカル|
|\$`|最後に正規表現でマッチした文字列よりも前の文字列|ローカル|
|\$*|Rubyスクリプトに与えられた引数の配列。ARGVと同じ|グローバル|
|\$/,\$-0|デフォルトの入力の行区切りを表す文字列。デフォルトは\n|グローバル|
|\$;,\$-F||グローバル|
|\$:,\$LOAD_PATH,\$-l||グローバル|
|\$DEBUG||グローバル|
|\$VERBOSE||グローバル|
|\$PROGRAM_NAME||グローバル|
|\$<||グローバル|
|\$FILENAME||グローバル|
|\$_||ローカル|

* Objectクラスに標準で定義されている組み込み定数

|定数|概要|
|:---|:---|
|ARGF|引数 (なければ標準入力) で構成される仮想ファイル|
|ARGV|Ruby スクリプトに与えられた引数を表す配列|
|DATA|スクリプトの \__END__ プログラムの終り以降をアクセスする File オブジェクト|
|ENV|環境変数を表す (疑似) 連想配列|
|FALSE|非推奨。代表的な偽の値。false と同じ|
|NIL|非推奨。 nil と同じ|
|RUBY_COPYRIGHT|Ruby のコピーライトを表す文字列|
|


### 文法
* 変数と定数

|変数の種類|命名規則|スコープ|初期化なしの動作|
|:---|:---|:---|:---|
|ローカル変数|先頭:英小 or _|代入式からそれを含むブロックまたはメソッドの終わりまで|未実行はnil,未記述は例外|
|インスタンス変数|先頭:@|インスタンス内|nil|
|クラス変数|先頭:@@|クラスの全インスタンス|例外|
|グローバル変数|先頭:$|どこからでも参照可能|nil|
|定数|先頭:英大|

* 演算子

|演算子|説明|
|:---|:---|
|代入||
|自己代入||
|多重代入||
|範囲式||
|条件式としての範囲式||
|and||
|or||
|not||
|条件演算子||
|===|caseでは内部の比較に===演算子を使っている|



* ブロック
* 例外処理
* 大域脱出
* キーワード引数
* ラムダ式(->)
* 引数

|種別|特徴|
|:---|:---|
|可変長引数|<ul><li>デフォルトは指定できない</li><li>引数は配列として扱われる</li><li>ひとつのメソッドには1つしか指定できない</li><li>可変長引数には*をつける</li></ul>|

* alias
alias 新メソッド名 旧メソッド名
alias 新グローバル変数名 旧グローバル変数名

### オブジェクト指向
* メソッドの詳細
* メソッドの可視性
* クラスの詳細
* クラスの継承
* モジュールの詳細
* Module#prepend
* Refinements

* privateメソッドはレシーバを指定した呼び出しはできない。
* ancestorsはレシーバがModuleクラスまたはClassクラスのインスタンスの場合に有効。
* const_missingはクラスに定数が定義されてないときに呼び出される。
* http://qiita.com/fukumone/items/2dd4d2d1ce6ed05928de

|メソッド|概要|
|:---|:---|
|inspect|オブジェクトを人間が読める形式に変換した文字列を返します。|

### 組み込みライブラリ
* よく使用されるクラス(Object,Kernel,Module)
* よく使用されるモジュール(Enumerable,Comparable)
* 数値
* 正規表現
* Proc
* Thread/Fiber

|クラス||
|:---|:---|
|thread|rescueで処理されなかった場合例外が発生したスレッドだけが警告なしで終了し、他のスレッドは実行を続ける。-dオプションではデバッグモードとなりいずれかのスレッドで例外が発生した時点でインタプリタ全体が中断する。|
|kernel|requireは拡張子補完をし、同じファイルの複数回ロードはしない。|
|object|dupはオブジェクトの内容、taint情報をコピーする。cloneはそれに加えてfreeze、特異メソッドなどの情報も含めた完全な複製を作成する。オブジェクトの参照している先までは複製しない。|
|Array|shiftは先頭の要素を取り除いてそれを返す。unshiftは引数の最後から順に先頭に挿入する。pushは配列の最後の要素に追加する。popは配列の最後の要素を返す。|


|モジュール|概要|
|:---|:---|
|Marshal|無名のクラス/モジュール、システムがオブジェクトの状態を保持するもの。（Dir,File,IO,Socket等）特異メソッドを定義したオブジェクトはマーシャリングできない。|

Enumerable#lazy
http://magazine.rubyist.net/?0041-200Special-lazy

### 標準添付ライブラリ
* よく使用されるライブラリ(socket,date,stringio)

|クラス|概要|
|:---|:---|
|stringio|文字列に IO と同じインタフェースを持たせるためのライブラリです|
|Time|Time - Time -> Float|
|rdoc|<ul><li>普通のリスト：'\*' or '-'</li><li>番号付きリスト：数字+ピリオド</li><li>アルファベット+ピリオド</li><li>イタリック体：\_word_</li><li>ボールド体：\*word\*</li><li>タイプライター体：+word+</li></ul>|
|DateTime|yesterday = DateTime.now - 1|
|Rational|Float + Rational -> Float|
|Complex|Float + Complex -> Complex|
|thread|スレッドを生成し実行するメソッドはstart,new,forkである。forkはinitializeメソッドを呼ばない。|

43