問題タブ [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_eval
or を直接使用しても同じ結果が得られyield
ます。
誰でもこの動作を説明できますか?
ruby - Ruby での改良
モジュール内で使用する以外に、単一の Ruby プログラムで改良の効果を制限する方法はありますか?
たとえば、絞り込みの名前が StringRefinement であり、StringRefinement を使用して入力すると、それが有効になり、プログラム ファイルの最後まで有効であるとします。
プログラムの後半の部分がその洗練の影響を受けないように、その境界を制限する方法はありますか?
ruby - ruby リファインメント間でコードを共有するには?
これは期待どおりに機能します。しかし、を使用してfoo
とbar
の間Hash
で とを共有したい場合、失敗します。Array
include
リファインメント間でコードを共有する方法はありますか?
ruby - Ruby2.0: Ruby Refinements と Monkeypatches の違いは何ですか?
どちらの方法でも簡単なタスクを実行できますが、
改良
したがって、module が であったdo_something
場所ならどこでも methodを使用できます。StringRefinements
using
モンキーパッチ
Refinements
Ruby の新しい概念と 1 つの概念の違いを知りたいMonkeypatch
です。Refinements
overを使用する利点は何Monkeypatch
ですか?