ようへいの日々精進XP

よかろうもん

2018 年 06 月 03 日 (日)

ジョギング, 日課 

  • お休み

久留米デート

  • 芸事, 若返りにご利益があると言われている神社にお参り
  • 久留米ラーメンを初めて食べた後に観音様を拝みに
  • 観音様の後はジェラートで〆る

やりたいことを短時間で済ませることが出来た, とても効率の良いデートだった (笑. 奥さんも喜んでくれたようで良かった.

今日のるびぃ ~ REx - Ruby Examination にチャレンジ (17) ~

REx - Ruby Examination の問題を自分なりにアレンジした上で 1 〜 3 問くらいずつ解いていく. 正直言ってかなり難しい. 尚, irb に動作確認環境は以下の通り.

$ ruby --version
ruby 2.1.10p492 (2016-04-01 revision 54464) [x86_64-linux]
$ irb --version
irb 0.9.6(09/06/30)

キーワード引数

以下のコードを実行するとどうなるか.

def foo(arg1:100, arg2:200)
  puts arg1
  puts arg2
end

option = {arg2: 900}

foo arg1: 200, *option

例外が発生する

以下, irb にて確認.

irb(main):001:0> def foo(arg1:100, arg2:200)
irb(main):002:1>   puts arg1
irb(main):003:1>   puts arg2
irb(main):004:1> end
=> :foo
irb(main):005:0> 
irb(main):006:0* option = {arg2: 900}
=> {:arg2=>900}
irb(main):007:0> 
irb(main):008:0* foo arg1: 200, *option
SyntaxError: (irb):8: syntax error, unexpected *
foo arg1: 200, *option

以下, 解説より抜粋.

  • キーワード引数へ Hash オブジェクトを渡すことが出来る
  • Hash の中身を渡す必要があるので, 変数の前に ** を付加する

以下, 正しく動くコード.

def foo(arg1:100, arg2:200)
  puts arg1
  puts arg2
end

option = {arg2: 900}

foo arg1: 200, **option

以下, irb にて確認.

irb(main):001:0> def foo(arg1:100, arg2:200)
irb(main):002:1>   puts arg1
irb(main):003:1>   puts arg2
irb(main):004:1> end
=> :foo
irb(main):005:0> 
irb(main):006:0* option = {arg2: 900}
=> {:arg2=>900}
irb(main):007:0> 
irb(main):008:0* foo arg1: 200, **option
200
900
=> nil
irb(main):009:0> foo(arg1: 200, **option)
200
900
=> nil

Complex, Fixnum, Float 等

以下のコードを実行するとどうなるか.

val = 10i * 2i
puts val.class

Complex クラスと出力される

以下, irb にて確認.

irb(main):010:0> val = 10i * 2i
=> (-20+0i)
irb(main):011:0> puts val.class
Complex
=> nil

以下, 解説より抜粋.

  • 10i複素数 (Complex) のオブジェクトを表す
  • Complex 同士の演算は Complex を返す

その他の演算について確認.

# Fixnum と Complex の演算結果は Complex
irb(main):014:0> v1 = 10 * 2i
=> (0+20i)
irb(main):015:0> v1.class
=> Complex

# Fixnum と Rational の演算結果は Rational
irb(main):016:0> v2 = 10 * 2r
=> (20/1)
irb(main):017:0> v2.class
=> Rational

# Fixnum と Float の演算結果は Float
irb(main):018:0> v3 = 10 * 2.0
=> 20.0
irb(main):019:0> v3.class
=> Float

# Complex と Rational の演算結果は Complex
irb(main):020:0> v4 = 10i * 2r
=> ((0/1)+(20/1)*i)
irb(main):021:0> v4.class
=> Complex

フムフム.