コマンドラインからRuby関数を直接呼び出すにはどうすればよいですか?
想像してください、私はこのスクリプトを持っているでしょうtest.rb:
_class TestClass
def self.test_function(some_var)
puts "I got the following variable: #{some_var}"
end
end
_
このスクリプトがコマンドライン(_Ruby test.rb
_)から実行された場合、何も起こりません(意図したとおり)。
Ruby test.rb TestClass.test_function('someTextString')
のようなものはありますか?次の出力を取得したい:_I got the following variable: someTextString
_。
最初にクラスの名前は大文字で始まる必要があり、静的メソッドを本当に使用したいので、関数名の定義はself.
で始まる必要があります。
class TestClass
def self.test_function(someVar)
puts "I got the following variable: " + someVar
end
end
次に、コマンドラインからそれを呼び出すためにあなたがすることができます:
Ruby -r "./test.rb" -e "TestClass.test_function 'hi'"
代わりにtest_function
をインスタンスメソッドとして使用した場合、次のようになります。
class TestClass
def test_function(someVar)
puts "I got the following variable: " + someVar
end
end
次に、それを呼び出します:
Ruby -r "./test.rb" -e "TestClass.new.test_function 'hi'"
コマンドラインでRuby構文を入力するのが面倒で、実際に引数をRubyに渡すだけの場合、test.rbは次のようになります。
_#!/usr/bin/env Ruby
class TestClass
def self.test_function(some_var)
puts "I got the following variable: #{some_var}"
end
end
TestClass.test_function(ARGV[0])
_
Test.rbを実行可能にし、次のように実行します。
_./test.rb "Some Value"
_
または、次のように実行します。
_Ruby test.rb "Some Value"
_
これは、Ruby=がARGV
配列をスクリプトに渡された引数に自動的に設定するためです。最初の引数を取得するには_ARGV[0]
_または_ARGV.first
_を使用できます、またはARGV.join(' ')
を使用して、スペースで区切られた単一の文字列に引数を組み合わせることができます。
多くのコマンドラインを使用している場合、最終的には標準のRuby libにある Shellwords を使用できます。
#!/usr/bin/env Ruby
class A
def run
p :Hello_world
end
self
end.new.run
スクリプトを作成する通常の方法Rubyは、トップレベルの実行環境を使用することですmain。クラスの外側で記述するメソッドとコードの定義を開始するだけで、これらは直接実行されます(ところで、クラス内のメソッドはメソッドの外側で実行されます。それ自体」も。)
とにかく、私はあなたと一緒にいます...私は名前付きクラスですべてのコードを書いてそのクラスをインスタンス化するのが好きなので、テクニックを組み合わせることができます..クラスが独自のオブジェクトを返すようにします..クラスに割り当て、初期化してからドットを挿入するレベルコード。
これにより、$ Ruby test.rb
と入力するだけで、望みどおりに動作します。または、Shebangを追加 したので、chmod +x test.rb; ./test.rb
できます。
このような例で呼び出す複数の引数がある場合:
class TestClass
def self.test_function(some_var1, some_var2)
puts "I got the following variables: #{some_var1}, #{some_var2}"
end
end
このように実行します(この場合、引数はコンマで区切る必要があります)
Ruby -r "./test.rb" -e "TestClass.new.test_function 'hi','Mike'"
コマンドラインからrbファイルを呼び出す方法を知っている場合
Ruby yourfile.rb
これにより、すべてのトリックを実行できます。
これで、クラスでメソッドを定義しただけです。これで、定義の下で呼び出すことができます。それでも読みたい場合は、目を大きく開けて
class TestClass
def self.test_function(some_var)
puts "I got the following variable: #{some_var}"
end
test_function(var)
end
関数が何かを出力せず、何かを返す場合のIngenuの答えの単なる拡張。
次のようになりますtest.rb
class TestClass
def self.test_function(some_var)
return "I got the following variable: " + some_var
end
end
次に、コマンドラインからそれを呼び出して戻り値を取得します:
Ruby -r "./test.rb" -e "puts TestClass.test_function('hi')"