sqlの実行。
1 2 |
|
1 2 |
|
テーブルの一覧を取得
1
|
|
rubyにはスコープゲートがある。
スコープゲートを越えて変数は参照できない。
スコープゲートには
class
module
def
があり、それぞれのブロックの中ではスコープが切り替わる。
1 2 3 4 5 6 7 8 9 10 |
|
def printでスコープが変わるので、外側のstrが参照できない。
解決するには例えばフラットスコープ
1 2 3 4 5 6 7 8 9 10 |
|
スコープゲート(class/module/def)を使わなければいいという話。
今回はdefをdefine _methodに変更した
classはClass.new
moduleはModule.new
でブロック内部に中身を記述する。
一応クラスの場合の例。
1 2 3 4 5 6 7 8 |
|
動的ディスパッチ
メソッド実行時にメソッドを動的に呼び出す。
日づけごとに天気を返すメソッドがあって、それを動的ディスパッチでメソッドを呼んでみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
動的メソッド
動的にメソッドを作成する
instance variable getでインスタンス変数の値は簡単にとれますが、それがない体で。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
まとめ
メソッド名に一定のルールがあり、それを引数等に応じてメソッド名を決定し動的に呼ぶ場合
→動的ディスパッチ
重複している箇所がある場合にメソッドの内容が似通っているなら
→動的メソッド
辺りを使い分けてリファクタリングすると幸せになれるかも?
1
|
|
他にありますでしょうか。
以下を入れれば良いっぽい
ruby-matchit - ’Matchit’ for Ruby. : vim online
ページ下部のClick on the package to download.からruby-matchit.vimをダウンロードして
~/.vim/plugin/
におきませう。
それだけで%で対応するdef endとか飛べちゃう。
vimで
:map
とすればキーマッピングの確認ができる
let mapleader = "任意のキー"
すでにあるメソッドに処理を追加したい場合。
すでにあるメソッドを踏襲した新しいメソッドを定義して、メソッドの呼び出し側を新しいメソッドに向けることができますが
現実的でないですね。
ではどうやってすり替えるか。
実現手段はいくつかあると思いますが、ここではアラウンドエイリアスを使ってみます。
今回はStringのto _sメソッドを、
文字列(文字列長)
と表示するよう変えてみる。
今日のコードではaliasを使いますが、二度呼ぶとエラーとなってしまうのでirbを都度起動してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
この前のrubyのオープンクラス - なんとなく日々徒然と使ってStringクラスにコーディングしていきます。
構文は
alias 新しいメソッド名 古いメソッド名
です。
今回の例ではto sにold to _sという別名をつけます。
1 2 3 4 5 6 7 8 9 10 |
|
それでto _sを書き換えちゃいます。
1 2 3 |
|
to sが呼ばれた場合は書き換えたメソッドが呼ばれ、old to sが呼ばれた場合は昔のメソッドが呼ばれる状態です。
書き換えられたto sは昔のto sをold to _sで呼び、lengthをそこにくっつけています。
これでメソッドのすり替えが完了です。
今日は肉の日。
肉関係ないけど.
機能追加中に、バグ報告がはいった場合。
今やってる修正を置いといて、最新を取得しなおしてバグフィックスしたい場合がある。
そんな場合
1
|
|
ってやると、今やっている作業内容(ステージングファイルもアンステージングファイルも)を一時退避できる。
戻した場合は
1
|
|
で、戻せる。
今保存しているstash一覧は
1
|
|
コンフリクトしたりして、stashがどうにもならなくなってstashを消し去りたい場合には
1
|
|
ってな感じでどうですか。
これ知るまでは
1 2 |
|
ってやっていたマヌケは私です。
ああ、とりあえず肉食いたい。
昨日降りしきる雨の中灯油をもったまま玄関前でよろけた拍子に水鉢を踏み割ってしまい。
地面に放り出された冬眠中の金魚とメダカを救出して、45センチのグッピー水槽に移したら
ノロノロでかわせずにグッピー♀にいじめられて冬眠からさめたばかりの金魚が死んでしまってとても悲しいのです。