问题标签 [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
是它们不是全局范围的。呸。
是孤立的,不是更糟。
— 改进不支持类方法。呸。当然,它们是通过 hack(记住,一切都是对象):
后者甚至不会导致性能损失,因为没有人会Fixnum.substr
故意调用。
— 细化是通过 执行的eval
。refine
不是关键字。呸。(嗯,“呸!”再次。)
所以,我的问题是:我是否错过了什么或者每个人都认为新引入的功能没有优势?
ruby - 将 ruby 类转换为模块比使用改进更好的方法?
Module#refine
方法接受一个类和一个块并返回一个细化模块,所以我想我可以定义:
并且以下测试通过
因此,使用细化,我可以将一个类变成一个模块,动态地细化其行为,并将其包含在其他类中。
- 有没有更简单的方法可以将一个类变成 Ruby 中的一个模块(比如在 ruby < 2 中)?
在rb_mod_refine的 C 实现中, 我们看到
这只是将细化的超类设置为
klass
复制细化模块内的类的实现吗?- 我知道多重继承是通过模块完成的,但是社区会如何看待上述内容
Class#include_refined
?从改进中提取这方面是否合理?“本地”修补类内部而不是使用“使用”开关来激活细化?
ruby-on-rails-4 - 如何在 Rails 视图中使用 Ruby 改进?
我有一个使用 Ruby 2.0 的 Rails 4 项目。我已经定义了一些改进。推杆
在视图文件的顶部会导致错误“未定义的方法'使用'”。
当我添加:
在我的控制器顶部(在类声明上方),我可以成功地使用控制器中的细化,但如果我尝试在视图中使用它,则会收到“未定义方法”错误。
谢谢!
ruby-on-rails - 如何在 Rails 控制器/动作中使用 Ruby 改进?
如果我在控制器之外尝试它可以工作:
如果我在控制器内部尝试或操作它不起作用:
它抛出'未定义的方法'使用'。
我读了这篇文章,作者在课堂上使用它:timelessrepo.com/refinements-in-ruby
ruby - 细化是否仅适用于实例方法?
我正在尝试了解 Ruby 的改进功能,但遇到了一个我不理解的场景。
以这个示例代码为例:
现在,当我在 REPL 中执行此操作时:
为什么是#what_are_you
精致的,但.preferred_accommodation
不是?
ruby - Ruby 改进的细微之处
这里有一个很好的关于当前在 ruby 中实现改进的文档: http ://ruby-doc.org//core-2.2.0/doc/syntax/refinements_rdoc.html ,但是有一些奇怪的极端情况。
首先,include module
正交于using module
(一个包括模块的实例方法,而另一个激活细化)。但是包含一个细化模块本身有一个技巧,请参阅
Better way to turn a ruby class into a module而不是使用细化?.
奇怪的是,这个细化模块不能与using
!
因此,仅使用精化模块的封闭模块。其次,我想使用上面的 yield 技巧来传递一个 Proc 来优化(即使它只接受一个块),而不是像
https://www.new-bamboo.co那样将 Proc 转换回源代码.uk/blog/2014/02/05/refinements-under-the-knife/。但是yield
在包含示例中使用 as 不起作用:
我们看到 Receiver1 仍然使用 Bar#foo 而不是提炼的方法。但是我们可以module_eval
改用:
我不太明白为什么module_eval
在这里工作而不是yield
方法。在细化块内,“default_definee”是细化模块,因此module_eval
将“default_definee”置于self
=“细化模块”不应影响它。实际上,在开头的“包含”示例中,当我使用module_eval
或直接使用yield
.
谁能解释这种行为?
ruby - 分层使用细化
改进是对 v2.0 的实验性补充,然后在 v2.1 中进行了修改并永久化。通过提供“一种在本地扩展类的方法”,它提供了一种避免“猴子补丁”的方法。
我试图申请Refinements
这个最近的问题,我将因此简化:
如果:i
_ a
_ i
_b
和
换句话说,字符串的匹配与大小写无关。
问题是确定a
与 的对应元素匹配的元素数量b
。我们看到答案是两个,偏移量1
和的元素2
。
一种方法是猴子补丁String#==:
或者改为使用Refinements
:
但是,我想这样使用Refinements
:
但是,如您所见,这给出了错误的答案。那是因为我正在调用Array#==并且细化不适用于Array
.
我可以这样做:
但这不是我想要的。我想做这样的事情:
但显然这不起作用。
我的问题:有没有一种方法可以优化String
用于Array
,然后优化Array
用于我的方法?
ruby - Ruby 中的细化
除了在模块中使用它之外,还有什么方法可以限制单个 ruby 程序中的改进效果?
例如,假设细化的名称是 StringRefinement,当我们使用 StringRefinement 键入时,它开始生效,并且一直有效到程序文件结束。
有没有办法限制它的边界,这样程序的某些后期部分就不会产生这种细化的效果?
ruby - 如何在 ruby 改进之间共享代码?
这按预期工作。但是,如果我想在和之间共享foo
和bar
使用Hash
,Array
它include
会失败。
有没有办法在改进之间共享代码?
ruby - Ruby2.0:Ruby Refinements 和 Monkeypatches 有什么区别?
无论哪种方式,我都可以做一些简单的任务,
改进
所以,我可以在模块所在的do_something
任何地方使用方法。StringRefinements
using
猴子补丁
我想知道 Ruby 的新概念Refinements
和Monkeypatch
. 使用Refinements
over有什么好处Monkeypatch
?