チュートリアル で Rubymonkは次のように述べています。
「Ruby では、実生活と同じように、私たちの世界はオブジェクトで満たされています。整数、文字、テキスト、配列など、すべてがオブジェクトです。」
しかし && と || 演算子ですか、演算子もオブジェクトですか? どのようにチェック?
これはRubyの「すべてはオブジェクトである」という哲学に反するものではありませんか?
チュートリアル で Rubymonkは次のように述べています。
「Ruby では、実生活と同じように、私たちの世界はオブジェクトで満たされています。整数、文字、テキスト、配列など、すべてがオブジェクトです。」
しかし && と || 演算子ですか、演算子もオブジェクトですか? どのようにチェック?
これはRubyの「すべてはオブジェクトである」という哲学に反するものではありませんか?
&&
です||
&&
とトークンはオブジェクトではなく、||
Rubyのパーサーによって定義された演算子です。興味があれば、ソースコードを調べて、実際の定義と実装の詳細を見つけることができます。はじめに、ソースの確認を開始するための正規表現の一致を次に示します。
$ fgrep -n '%token tANDOP tOROP' ruby-1.9.3-p194/ext/ripper/ripper.y
719:%token tANDOP tOROP /* && and || */
それはあなたが「すべて」をどのように定義するかに依存します。私は個人的に、ルビーの個々の概念がオブジェクトであるとは決して主張しません。ルビーがどのように機能するかを説明するための良い定義は実際にはないと思います。私はあなたがルビーがそれをする方法を受け入れる必要があると思います、それはあなたがそれを使うにつれて明白になるでしょう。
何かがオブジェクトであるかどうかを確認したい場合は、それを変数に割り当てるか、メソッドを呼び出してみてください。オペレーターでこれを行おうとすると、エラーが発生します。注目すべき例外は、オブジェクトではなくオブジェクトを返すメソッドです。
オブジェクトの概念はやや抽象的なことに注意してください。2つの変数が同じオブジェクトを指すことができます。すべてのオブジェクトは。で表されますobject_id
。object_idは、メモリ内の場所のように考えることができます。または、オブジェクトを家と考えることができ、複数の名簿に家の住所を含めることができます。
# point 2 variables to the same object
>> s = t = 's'
=> "s"
>> s.object_id
=> 70269794388360
>> t.object_id
=> 70269794388360
# get the object by id (for demonstration only; I don't recommend using this in application code)
>> ObjectSpace._id2ref(70269794388360)
=> "s"
# modifying the object. both variables "see" the change
>> s << '_'
=> "s_"
>> t
=> "s_"
家の例えを続けると、ストリングビアに追加すること<<
は、新しい椅子を家に持ち込むようなものです。(住所を使用して)その家に自分の名簿をたどる人は誰でも、その家(オブジェクト)に新しい椅子があることがわかります。
&&
Ruby言語の設計者は、演算子をオブジェクトのように扱うことを許可する理由を認識していませんでした。それを許可する理由がわかりますか?
演算子はオブジェクトではなく、Rubyのほとんどの演算子はメソッドです。
いくつかのオブジェクトを実行irb
して見ることで確認できます。public_methods
$ irb
irb(main):001:0> "a"=="b"
=> false
irb(main):002:0> "a".public_methods
=> [:<=>, :==,.........
&&
そして、質問の演算子についてはどうでしょうか||
。Ruby言語にハードコードされていますが、モジュール==
から混合されています。Comparable
Rubyでは、すべての変数タイプがオブジェクト(Pythonなど)を参照します。しかし、演算子はオブジェクトではありません。それらに対してto_s()メソッドを呼び出そうとすることで確認できます。
Ruby のほとんどの Operator は、実際にはメソッド呼び出しです。
2.+(3) # 5
ここに良い説明があります:http://net.tutsplus.com/tutorials/ruby/ruby-for-newbies-operators-and-their-methods/