LoginSignup
0
0

More than 5 years have passed since last update.

Ruby Silver and Gold

Last updated at Posted at 2018-11-19

Blockについて

ものすごい解りやす買ったのが以下の記事
https://qiita.com/kidach1/items/15cfee9ec66804c3afd2

ブロックとは、

do~end(もしくは{~})で囲われた、引数となるためのカタマリ。

block.rb
def give_me_block
  yield
end

give_me_block do
  p "Hello"
end
#=> "Hello"

上を明示的に書くと下になる。

explicit_block.rb
def give_me_block(&block) ##&blockの&は入ってきた引数をProcオブジェクトに変更するためのもの
  block.call
end

give_me_block do
  p "Hello"
end
#=> "Hello"

ブロック、プロックの理解

more.rb
#1
def magic_five_box(after_input, someProc)
  someProc.call(5, after_input)
end

#2
sum_proc = Proc.new do |x, y|
  p x + y
end

#3
magic_five_box(3, sum_proc)
#=> 8

1 では、magic_five_boxを定義している。
2で、 sum_procは、x,yを仮引数とするブロックである。(仮引数は、変数みたいなイメージ)
3でsum_procというブロックをmagic_five_boxのsomeProcに実引数として渡している。
4, sum_procオブジェクト内の p x+y が.call(5, 3)で5と3を実引数として実行される。

Rubyの変数について

  • Rubyのローカル変数は、その階層で閉じるというのが肝。Javaとかだと、上位層で定義されたローカル変数は、下位層でも使えるが、Rubyの場合は、あるスコープで定義されたローカル変数は、下位層だろうが上位層だろうが、そのスコープ内でしか使用できない。

  • Rubyのインスタンス変数については、基本は、定義したスコープ内で初期化して使うものだが、そのスコープ外で呼び出したい場合は、attr_accesorを使うことで、その変数に変更を加えたり、初期化したりすることができる。

  • Rubyのクラス変数については、なんのためやねん?-> 確認

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0