ためすう
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. ])