答えて
配列を変更しない第二のスニペットは、このスニペットは、なぜ同じ理由:
def foo(x)
x = [1]
end
a = []
foo(a)
は、変数は変更されません。あなたのコードの変数xはブロックのスコープのローカルなので、何かを割り当てることができますが、割り当ては外部には見えません(Rubyは値渡しの言語です)。
はもちろん、ブロックはまた、彼らは宣言されたローカル変数のクロージャを持っているので、これは動作します:
def foo(x)
yield(x)
end
b = []
foo(123) do |x|
b = [1]
end
p b # outputs [1]
ローカル変数...もちろんです。ありがとう! – artemave
最初のメソッドは空の配列の最後に1を置きます。あなたは空の配列ではなく、あなたがそれを試してみて、複製う1であると言うカントと同じよう...
b = [].tap do |x|
x.unshift(1)
end
ではこれはまだあなたが使用することができる方法を見てみ呼び出している一例に過ぎません入力して配列を作成します。
Array.methods.sort
すべてのベストと幸運
これはやや無関係である - それ[].tap
イディオムが恐ろしいです。あなたはそれを使用すべきではありません。レールコードでそれを使用した多くの人々でさえ、恐ろしいことを認め、もはやそれを使用しません。
使用しないでください。
理由はどうか説明してください。 – artemave
@artemave:それは 'タップ'の悪用だからです。 Tapはメソッドチェイン(したがって名前)をタップしたり、流体インターフェイスを維持したりするために設計されています。あなたのコードで 'tap'が使われる方法はDRYerでも普通の方法よりも簡潔ではありません。なぜあなたがそれをやっているのか分かりません - あなたのために' tap'を使っているようです。 'x = [];の何が問題なの? x << 1'または実際に '[] << 1'(本当に望むなら) – horseyguy
' tap'イディオムは強力なオブジェクト構造です。ブロックをスコープし、結果を保持する一時変数を使用しないでください(たとえば、メソッドから結果のオブジェクトをすぐに返す場合は、後で必要としません)。私の例は実際にはそのために「タップ」を使用しますが、質問に付随するだけです。 – artemave
- 1. リンクをタップしたときのUIWebviewについての質問
- 2. JavaScriptオブジェクト、2つの質問
- 3. PHPオブジェクト拡張質問
- 4. ASP.Net CacheDependencyオブジェクトの質問
- 5. c#MailMessageオブジェクトの質問
- 6. MKAnnonationViewタップの問題
- 7. オブジェクト指向のゲームデザインの質問
- 8. オブジェクト指向プログラミングの質問:グローバルオブジェクトパートII
- 9. JSONオブジェクトの質問を使用
- 10. オブジェクト指向設計の質問
- 11. 質問については、オブジェクトのリリース
- 12. 構文の質問:PHPオブジェクトへのアクセス
- 13. オブジェクト指向のデザイン質問、iPhone
- 14. 質問オブジェクトの種類について
- 15. 基本オブジェクト関係マッピングの質問noob
- 16. オブジェクトについての質問
- 17. コアデータ - 管理オブジェクトに関する質問
- 18. HibernateのClobオブジェクトに関する質問
- 19. Moqオブジェクトの質問を設定する
- 20. オブジェクト指向設計の質問
- 21. 共有オブジェクト(DLL)に関する質問
- 22. オブジェクトC静的変数メモリの質問
- 23. どのボタンがタップされましたか... iPhoneとObj-Cの質問
- 24. Cordova JQueryタップ/クリック問題
- 25. 質問の質問Django
- 26. SQLソート/ページング質問質問
- 27. 質問:MySQLグループ質問:
- 28. 質問と代理質問
- 29. Prologの質問の質問
- 30. Rubyのオブジェクト#タップのGroovy相当
[Stringオブジェクトの 'tap'メソッドで期待される結果が返されません](http://stackoverflow.com/questions/1331976/the-tap-method-on-string-object-doesnt-return -expected-result) –