1

私は初めて Ruby でプログラムを作成しています (私は RubyMine を IDE として使用しています)。以前は主に Java でコーディングしていました。

Java でプログラミングするときは、コードに機能を追加するたびにコードを定期的に「実行」して、それが適切に機能することを確認していました。

Rubyでそれをやろうとしていますが、少し苦労しています。

プログラムのメニューとして使用する次のクラスがあるため、ユーザーがプログラムを実行するときに開始する場所です。

class Application
  # To change this template use File | Settings | File Templates.
  def initialize
    mainMenu
  end

  def navigateTo(what)
    what.new.display
    mainMenu
  end

  def mainMenu
    puts "What would you like to do?
      1: Add module to a scheme
      2: Remove module from a scheme
      3: Query modules
      4: Modify module
      5: Register a student on a scheme
      6: Remove a student from a scheme
      7: Register a student on a module
      8: Remove a student from a module"
case gets.strip
  when "1"
    navigateTo Module
    addModule
  when "2"
    navigateTo Module
  when "3"
    navigateTo Module
  when "4"
    navigateTo Module
  when "5"
    navigateTo Student
  when "6"
    navigateTo Student
  when "7"
    navigateTo Student
end
end
end

ただし、クラスを実行すると、コンソールに実行中であることを示す行が表示されますが、次の行は「プロセスは終了コード 0 で終了しました」です。

これがなぜなのか理解できませんか?Javaにはメインメソッドがあり、プログラムが実行されたときに何をすべきかを常に指示する場所でした...しかし、Rubyで私が知る限り、メインメソッドは必要ありませんか? この場合、これまでに書いたものを実行して、正しく書いたことを確認するにはどうすればよいですか?

*更新**

OK、行に追加しました

Application.new

提案どおり、それは素晴らしいことです。メニューが印刷されるようになりました。メニューからオプション 1 を選択すると、次の行がコンソールに出力されました。

#<Module:0x1bd2c90>What would you like to do?

その後、再度メニューを印刷します。

オプション 1 は、次のようなモジュール クラスに移動する必要があります。

class Module
  # To change this template use File | Settings | File Templates.
  @@moduleScheme = nil
  @@moduleYear = nil
  #@moduleTitle = ""

  def self.moduleYear
    @@moduleYear
  end

  def initialize(v)
    @val = v
  end
  # Set and get the @val object value
  def set (v)
    @val = v
  end
  def get
    return @val
  end

  def addModule
    moduleName = Module.new(30)
    moduleRefNo = Random(100)
    #moduleTitle = @moduleTitle
    moduleYear(4)

    print "What is the name of the module you would like to add?"
    moduleName = gets
    moduleRefNo
    printf "Which year does the module belong to?"
    @@moduleYear = gets
    puts "#{moduleName}, belonging to #{@@moduleYear} has been added to the system, with reference number #{moduleRefNo}."
    navigateTo Application

  end

  def addModuleToScheme
    moduleName.moduleScheme = schemeName
  end
  def removeModuleFromScheme
    moduleName.moduleScheme = nil
  end

  def queryModule

  end

end

ユーザーがメイン メニューからオプション 1 を選択し、プログラムが Module クラスに移動すると、そのクラスが完全に実行される、つまり、プロンプトがユーザーに表示され、ユーザーがキーボードで入力したものを読み取ると予想していました。次に、行で示されているように、メニューに戻ります

navigateTo Application

私の「addModule」関数の最後に。ただし、何らかの理由で、Module クラスに移動していないか、最後までスキップしているようです。ここで私が間違っていることを誰かが指摘できますか?

4

2 に答える 2

3

ruby ファイルを実行すると、ファイルが最初から最後まで実行されます。ファイルでは、クラスを定義しているだけなので、そのクラスをルビーで作成し、そのクラスのインスタンスをインスタンス化するように指示していないため、何もしません。ファイルの最後に を追加しますApplication.new。これにより、そのクラスのインスタンスが作成され、コードを見て、出力して入力を受け取ります

于 2012-08-14T14:25:32.330 に答える
0

コードは次のようになります。

class Application

  def run
    puts "What would you like to do?
      1: Add module to a scheme
      ...."
  end
  ...
end

Application.new.run
# here the user will interact with you application
于 2012-08-14T14:32:29.130 に答える