私は最近、多くのルビメソッドで使用されているパイプ入力がある程度必要ではないことを発見しましたが、これは矛盾しているようです。あなたがそこにはパイプで連結された入力されていない、との機能は、単にメソッドがコールされていることを前提とし、instance_evalを内部に見ることができるようにRubyでパイプ入力が必要なのはいつですか? (| x | x.to_s)
DateTime.now.instance_eval{[prev_day, to_datetime, tomorrow]}.map{|d| d.strftime('%m/%d/%Y')}
=> ["06/20/2016", "06/21/2016", "06/22/2016"]
:たとえば、この行は、昨日、今日、そして明日のための文字列の配列を作成し、 DateTime.now。しかし、同じ方法をマップメソッドに適用しようとすると、
DateTime.now.instance_eval{[prev_day, to_datetime, tomorrow]}.map{strftime('%m/%d/%Y')}
NoMethodError: undefined method `strftime' for main:Object
突然、メインでメソッドを使用しようとしていますか?
私の質問は、なぜこの方法が第1の方法ではなく、第2の方法で機能するのかということです。 docs for instance_eval
から
Ah ha!私のコードに戻ると、これは常に動作しているinstance_evalです。 OK、今は意味をなさない。 – oMiKeY
これは実際には 'instance_eval'とはまったく関係ありません。もっと単純な例は '[1,2,3] .map {chr}'と '[1,2,3] .map {| x | x.chr} 'となります。結果はまったく同じです。 –
@Mike:あなたの例を再現できません: '[1,2,3] .map {chr}'の結果は ですNameError:未定義のローカル変数またはメソッド 'chr' for main:Object' on Ruby 2.3.1 – spickermann