問題タブ [refinements]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - Ruby 2.0 の改良はまったく役に立たないのですか?
Ruby 2.0 で導入された、いわゆる改良がありました。私は彼らと遊んでいましたが、今では完全に甘やかされています:
— の主な宣言された利点refineは、グローバル スコープではないことです。ああ。
悪くはありません。
— 絞り込みはクラス メソッドをサポートしません。ああ。もちろん、それらはハックによるものです (覚えておいてください、すべてがオブジェクトです)。
後者は、誰も故意に呼び出すことはないため、パフォーマンスが低下することさえありませんFixnum.substr。
— 改良は を通じて実行されますeval。refineはキーワードではありません。ああ。(まあ、「バー!」再び。)
それで、私の質問は次のとおりです。私はスマートを逃していますか、それとも新しく導入された機能に誰も利点がないと考えていますか?
ruby-on-rails - Railsコントローラー/アクション内でRubyの改良を使用するにはどうすればよいですか?
コントローラーの外で試してみると、うまくいきます:
コントローラーまたはアクション内で試しても機能しません:
「未定義のメソッド「using」」をスローします。
私はこの記事を読み、著者はクラス内でそれを使用しています: timelessrepo.com/refinements-in-ruby
ruby - 改良はインスタンス メソッドにのみ適用されますか?
Ruby の改良機能を理解しようとしていますが、理解できないシナリオに遭遇しました。
このコード例を見てください:
今、REPLでこれを行うと:
#what_are_you洗練されているのに、そうでないのはなぜ.preferred_accommodationですか?
ruby - ルビーの改良の機微
ruby での改良の現在の実装に関する非常に優れたドキュメントが http://ruby-doc.org//core-2.2.0/doc/syntax/refinements_rdoc.htmlにありますが、奇妙なケースがいくつかあります。
まず、include module直交してusing moduleいます (1 つはモジュールのインスタンス メソッドを含み、もう 1 つはリファインメントをアクティブにします)。しかし、絞り込みモジュール自体を含めるトリックがあります。「
絞り込みを使用するよりも Ruby クラスをモジュールに変換する方法が優れていますか?」を参照してください。.
using奇妙なことに、この改良モジュールは!では使用できません。
したがって、洗練モジュールの囲みモジュールでのみ作業を使用します。次に、 https://www.new-bamboo.coのように Proc をソースに戻すことに頼らずに、上記の yield トリックを使用して Proc を渡して (ブロックのみを受け入れても) 洗練させたいと考えました
。 .uk/blog/2014/02/05/refinements-under-the-knife/ . ただしyield、インクルードの例のように使用しても機能しません。
Receiver1 は依然として Bar#foo を使用しており、洗練されたメソッドを使用していないことがわかります。module_evalただし、代わりに使用できます。
module_evalメソッドではなく、なぜここで機能するのかよくわかりませんyield。改良ブロック内では、'default_definee' が改良モジュールであるためmodule_eval、'default_definee' をself='改良モジュール' に配置しても影響を受けません。実際、冒頭の「include」の例では、module_evalor を直接使用しても同じ結果が得られyieldます。
誰でもこの動作を説明できますか?
ruby - Ruby での改良
モジュール内で使用する以外に、単一の Ruby プログラムで改良の効果を制限する方法はありますか?
たとえば、絞り込みの名前が StringRefinement であり、StringRefinement を使用して入力すると、それが有効になり、プログラム ファイルの最後まで有効であるとします。
プログラムの後半の部分がその洗練の影響を受けないように、その境界を制限する方法はありますか?
ruby - ruby リファインメント間でコードを共有するには?
これは期待どおりに機能します。しかし、を使用してfooとbarの間Hashで とを共有したい場合、失敗します。Arrayinclude
リファインメント間でコードを共有する方法はありますか?
ruby - Ruby2.0: Ruby Refinements と Monkeypatches の違いは何ですか?
どちらの方法でも簡単なタスクを実行できますが、
改良
したがって、module が であったdo_something場所ならどこでも methodを使用できます。StringRefinementsusing
モンキーパッチ
RefinementsRuby の新しい概念と 1 つの概念の違いを知りたいMonkeypatchです。Refinementsoverを使用する利点は何Monkeypatchですか?