ためすう

Proc を使ってみる (Ruby)

2019-10-08

やったこと

Proc を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

ブロックをコンテキスト(ローカル変数のスコープやスタックフ レーム)とともにオブジェクト化した手続きオブジェクトです。

proc.rb

my_proc = Proc.new do |name|
  'hoge ' + name
end

p my_proc.call('called')

def my_call(b)
  p b.call('called in my_call')
end

my_call(my_proc)

出力結果

$ ruby proc.rb
"hoge called"
"hoge called in my_call"

参考

yield を使ってみる (Ruby)

2019-10-07

やったこと

yield を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

自分で定義したブロック付きメソッドでブロックを呼び出すときに使います。 yield に渡された値はブロック記法において | と | の間にはさまれた 変数(ブロックパラメータ)に代入されます。

yield.rb

def hoge
  yield('hoge')
end

hoge {|name|
  p name.upcase * 3
}

出力結果

$ ruby yield.rb
"HOGEHOGEHOGE"

参考

refine を使ってみる (Ruby)

2019-10-07

やったこと

refine を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

module-function.rb

class Sample
  def hoge
    "#{self.class.name}:#{__method__}"
  end
end

module M
  refine Sample do
    def hoge2
      "#{self.class.name}:#{__method__} 222"
    end
  end
end

p Sample.new.hoge

begin
  p Sample.new.hoge2
rescue => e
  p e
end

using M
p Sample.new.hoge2

出力結果

$ ruby refine.rb
"Sample:hoge"
#<NoMethodError: undefined method `hoge2' for #<Sample:0x00007fa29e0f1f48>
Did you mean?  hoge>
"Sample:hoge2 222"

参考

module_function を使ってみる (Ruby)

2019-10-07

やったこと

module_function を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

module-function.rb

module Sample1
  def hoge1
    'hoge1'
  end
  module_function :hoge1

  def hoge2
    'hoge2'
  end
end

class Sample2
  include Sample1
end

p Sample1.hoge1

p Sample2.new.hoge2
p Sample2.new.hoge1

出力結果

$ ruby module-function.rb
"hoge1"
"hoge2"
Traceback (most recent call last):
module-function.rb:19:in `<main>': private method `hoge1' called for #<Sample2:0x00007fd48b8766c8> (NoMethodError)
Did you mean?  hoge2

参考

private なクラスメソッドを定義する (Ruby)

2019-10-06

やったこと

private なクラスメソッドを定義する方法を調べました。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

private.rb

class Sample
  private

  def self.hoge1
    'hoge1'
  end

  def self.hoge2
    'hoge2'
  end
  private_class_method :hoge2

  class << self
    private

    def hoge3
      'hoge3'
    end
  end
end

# 呼び出せる
p Sample.hoge1

# 例外発生
# p Sample.hoge2

# 例外発生
# p Sample.hoge3

出力結果

$ ruby private.rb
"hoge1"

参考

  • プロを目指す人のためのRuby入門

splat 展開 (Ruby)

2019-10-06

やったこと

splat 展開を使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

$ irb
irb(main):001:0> [*3..8]
=> [3, 4, 5, 6, 7, 8]
irb(main):002:0> [*'bx'..'cg']
=> ["bx", "by", "bz", "ca", "cb", "cc", "cd", "ce", "cf", "cg"]

参考

AWS CLI の設定をする

2019-10-06

やったこと

AWS CLI (Command Line Interface) の設定をします。

調査

設定する

$ aws configure
AWS Access Key ID [None]: xxx
AWS Secret Access Key [None]: xxx
Default region name [None]: xxx
Default output format [None]: xxx

設定した値を確認する

$ less ~/.aws/config

[default]
region = xxx
output = xxx
$ less ~/.aws/credentials

[default]
aws_access_key_id = xxx
aws_secret_access_key = xxx

参考

AWS CLI をインストールする

2019-10-05

やったこと

AWS CLI (Command Line Interface) を Mac にインストールします。

調査

pip3 でインストール

$ pip3 install awscli --upgrade --user

path を通す

~/.bash_profile

export PATH=~/.local/bin:$PATH

再読み込み

$ source ~/.bash_profile

バージョン確認

$ aws --version
aws-cli/1.16.253 Python/3.6.2 Darwin/17.7.0 botocore/1.12.243

参考

numpy.transpose を使う

2019-10-05

やったこと

numpy.transpose を使ってみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.16.4'

調査

>>> x = np.arange(6)
>>> x = x.reshape(3, 2)
>>> x
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> x.transpose()
array([[0, 2, 4],
       [1, 3, 5]])
>>> x.transpose(1, 0)
array([[0, 2, 4],
       [1, 3, 5]])
>>> x.transpose(0, 1)
array([[0, 1],
       [2, 3],
       [4, 5]])

次元を入れ替えます。

参考

numpy.clip を使う

2019-10-05

やったこと

numpy.transpose を使ってみます。

確認環境

$ python
Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 21 2017, 18:29:43)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.16.4'

調査

最小値、最大値の範囲に値をおさめます。

>>> a = np.array([0.5, -7, 0.9, 1.2])
>>> np.clip(a, 0, 1)
array([0.5, 0. , 0.9, 1. ])

参考