はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
関数 (Python)
bb.py
def make_qv(x):
return x + 1
qv = make_qv(1)
main.py
import bb
print(bb.make_qv(2))
print(bb.qv)
output
3
2
def make_qv
はmain
とbb
の双方から呼び出し可能です。
どうすRuby
bb.rb
module BB
def make_qv(x)
return x + 1
end
qv = make_qv(1)
end
main.rb
require_relative 'BB'
puts BB.make_qv(2)
puts BB.qv
output
undefined method `make_qv' for BB:Module
おお、qv = make_qv(1)
でメソッドが見つからないと仰せですか。
ここは、モジュールの特異メソッドで。
bb.rb
module BB
def self.make_qv(x)
return x + 1
end
qv = make_qv(1)
end
output
3
undefined method `qv' for BB:Module
ああ、ゲッター
が無いのか。
bb.rb
module BB
def self.make_qv(x)
return x + 1
end
def self.qv
@qv ||= make_qv(1)
end
end
output
3
2
よしよし。
今回の例では、module_function :make_qv, :qv
でもいけますが、module BB
内で@qv
を利用する場合は特異メソッドでないと、動作しないようです。
メモ
- Python の 関数の呼び出し を学習した
- 百里を行く者は九十里を半ばとす