Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyインタープリターのオプションとそれらを正しく使用する方法

Rubyインタープリターは、R​​ubyコードを読み取って実行するプログラムです。

しかし…

デフォルトのRubyインタープリター(MRI)には、興味深く便利なコマンドラインオプションがたくさんあることをご存知ですか?

いいね

ruby -v

これにより、現在使用しているRubyバージョンが得られます。

または-e ファイルなしで、 irb に移動することなく、コードを直接実行できるフラグ。 。

このように

ruby -e 'puts 123'

これらのフラグは、 -hを使用して見つけることができます 。

-helpでのみ表示できる「非表示」フラグがいくつかあります 。

これが私が思うものの表です…

最も興味深いフラグ

フラグ 説明 印刷Rubyバージョン 構文チェック コードを直接実行する 警告を有効にする ファイル/gemが必要です ロードパスにディレクトリを追加 すべての文字列をフリーズします 解析ツリーを表示
-v
-c
-e
-w
-r
-私
–frozen-string-literalを有効にする
–構文木をダンプ

これらのフラグのいくつかに焦点を当てて、それらがどのように機能するかを見てみましょう!

構文チェック

コードがあり、構文が正しいかどうかを知りたい場合は、 -cを使用できます。 CLIオプション。

ruby -c code_without_syntax_errors.rb
# Syntax OK

ruby -c code_with_syntax_errors.rb
# syntax error, unexpected tIDENTIFIER, expecting end-of-input

シンプルですが、機能します🙂

クイック必須

ファイルの先頭に「require」と書かなくても、一時的にgemをRubyプログラムに要求したい場合があります。

デバッグの宝石のように。

ruby -rpry code.rb

とても役に立ちました!

警告フラグ

警告フラグを使用すると、リンティングが有効になり、コードで発生する可能性のある問題が表示されます。

たとえば、このコード

p @test

ruby​​ -w を使用すると、次の警告が出力されます :

warning: instance variable @test not initialized

これは良い警告です!

最初に値を指定せずにインスタンス変数を使用しようとしている可能性があるためです。

または、インスタンス変数名にタイプミスがある可能性があります。このフラグは、問題が発生する前に見つけるのに役立ちます。

修正は簡単です

@test = nil

別の例を次に示します。

c = 1

これでわかります

warning: assigned but unused variable - c

この警告を修正するには、変数を削除するか、使用することができます。

これはローカル変数に対してのみ機能します 。

ただし、ブロック引数の内側では、未使用の引数をアンダースコア( _ )に置き換えることが「ベストプラクティス」と見なされていることを知っておく必要があります。 。

{ chocolate: 82 }.map { |k, _| k }

これはRubyの一般的な規則です。

_ 特別なものではなく、たまたま有効な変数名であるだけです。

その他の警告の例

次のコードの結果は、メソッドから返されたり、変数に割り当てられたりすることはありません。

2 * 2

ルビーはあなたにこれが好きだと警告します

warning: possibly useless use of * in void context

修正しますか?

役に立たないステートメントを削除するか、変数に割り当てます。

では、この方法を見てみましょう

def orange(weight, quantity)
  # ...
end

orangeを呼び出すにはさまざまな方法があります :

orange 100, 2
orange(100, 2)

orange *[100, 2]
orange(*[100, 2])

orange * [100、2]を使用する場合 警告を有効にすると、次のようになります:

warning: '*' interpreted as argument prefix

何が起こっているのですか?

あいまいさ。

Rubyはあなたがorange* [100、2]を意味すると考えています 、 orange * [100、2]の代わりに 。

*の間のスペース &[ * を関連付けるため、違いが生じます 配列が欠落している場合、または * と見なされる場合は、配列(スプラット演算子)を使用します 存在する場合はメソッド呼び出しです。

そうです、この場合、スペースが重要です。

この警告は、他の方法でメソッドを呼び出すことで修正できます。

-wを使用して独自のコードを実行します いくつかの警告を削除してフラグを立てて改善します🙂

Read-Eval-Print-Loop

あなたはおそらくirb&pryに精通しているでしょう、それらは両方とも私たちがREPLと呼んでいるものです。

-nを使用する -eと組み合わせたフラグ フラグを立てると、ごくわずかなコードで同様の効果を得ることができます。

ここに例があります

echo 'bacon\nchocolate\norange' | ruby -ne 'puts $_.upcase'

# BACON
# CHOCOLATE
# ORANGE

これは、 echoからの入力を受け取ります 、次に、行ごとにコードを呼び出します( puts$_。upcase

ここで$_ getsによって読み取られた最後の入力値を含む特別な変数です 。

Frozen String Literals Flag

Ruby 2.3では、フリーズされた文字列リテラル「マジックコメント」が導入されました。

このように見えます

# frozen_string_literal: true

これにより、すべての文字列がフリーズします 、不変にします(変更できません)。

これを行う別の方法は、-enablefrozen-string-literalを渡すことです。 Rubyにフラグを立てます。

このコード

str = "abcdef"

str[0] = "b"

そのフラグを使用すると、このエラーが発生します:

can't modify frozen String (FrozenError)

しかし、文字列を変更する必要がある場合はどうなりますか?

次に、これを行うことができます

str = "abcdef".dup

またはこれ

str = +"abcdef"

どちらも、凍結されていない文字列を使用できます。

概要

バージョンフラグ、警告フラグ、フリーズされた文字列リテラルなど、Rubyのコマンドラインオプションについて学習しました。これらのフラグはすべて便利です。試してみてください!

この記事を共有することを忘れないでください より多くの人々がそれから利益を得ることができます。

読んでくれてありがとう🙂


  1. Rubyエイリアスキーワードの使用方法

    Rubyメソッドに別の名前を付けるには、次の2つの方法があります。 エイリアス(キーワード) alias_method 彼らはわずかに異なる方法で同じことをするので、これは紛らわしいトピックになる可能性があります。 この画像は違いの要約です : しっかりと理解するために、これらの違いをさらに詳しく調べてみましょう! エイリアスキーワード まず、aliasがあります 、これはRubyキーワードです(ifなど) 、def 、class 、など) このように見えます : alias print_something puts print_something 1 prin

  2. RubyでStructとOpenStructを使用する方法

    Rubyの構造体とは何ですか? 構造体は組み込みのRubyクラスであり、値オブジェクトを生成する新しいクラスを作成するために使用されます。値オブジェクトは、関連する属性を一緒に格納するために使用されます。 ここに例があります : Point 2つの座標(x &y 。 このデータはさまざまな方法で表すことができます。 いいね : 配列[10, 20] ハッシュ{ x: 10, y: 10 } オブジェクトPoint.new(10, 20) 複数のPointを使用する場合 、オブジェクトアプローチを使用することをお勧めします。 しかし… これら2つの値を一緒に格納するた