0

関数を実装するディレクトリにすべての ruby​​ ファイルを含めたいtoto()

pythonで私はやります:

res = []
for f in glob.glob("*.py"):
  i = __import__(f)
  if "toto" in dir(i):
    res.append(i.toto)

そして、次のようにリストを使用できます。

for toto in res:
  toto()
4

1 に答える 1

2

RubyではインポートはPythonとは大きく異なります。Pythonではファイルとモジュールはほぼ同じですが、Rubyではそうではありません。モジュールを手動で作成する必要があります。

res = []
Dir.glob("*.rb") do |file|
  # Construct a class based on what is in the file,
  # and create an instance of it
  mod = Class.new do
    class_eval File.read file
  end.new

  # Check if it has the toto method
  if mod.respond_to? :toto
    res << mod
  end
end

# And call it
res.each do |mod|
  mod.toto
end

または多分もっとRuby慣用句:

res = Dir.glob("*.rb").map do |file|
  # Convert to an object based on the file
  Class.new do
    class_eval File.read file
  end.new
end.select do |mod|
  # Choose the ones that have a toto method
  mod.respond_to? :toto
end

# Later, call them:
res.each &:toto
于 2013-02-04T19:04:15.043 に答える