はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
callable (Python)
if callable(func):
こちらの記事が分かりやすい。独習Pythonには載っていない
defined? (Ruby)
def a; end
b = lambda { |x| p x }
c = 1
class D; end
e = D.new
p defined?(a)
p defined?(b)
p defined?(c)
p defined?(D)
p defined?(e)
p defined?(f)
p '----------'
p [a, b, c, D, e]
p [a.class, b.class, c.class, D.class, e.class]
# output
"method"
"local-variable"
"local-variable"
"constant"
"local-variable"
nil
"----------"
[nil, #<Proc:0x000002a58a4228e0 main.rb:2 (lambda)>, 1, D, #<D:0x000002a58a422840>]
[NilClass, Proc, Integer, Class, D]
Python | Ruby | |
---|---|---|
組み込み関数 | True | method |
未定義の関数 | False | nil |
定義済みの関数 | True | method |
定義済みのクラス | True | constant |
lambda | - | local-variable |
行けそうです。
追記
list = [0, 1, 2, 3]
iter_list = iter(list)
print(callable(iter_list))
# false
iter()
の場合、false
になります。
list = [0, 1, 2, 3].to_enum
p defined?(list)
p list.class
# "local-variable"
# Enumerator
よって、Enumetator
の場合、クラスを見る必要があります。
メモ
- Python の callable を学習した
- 百里を行く者は九十里を半ばとす