问题标签 [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.

0 投票
1 回答
79 浏览

ruby - 是否可以使用在 Sinatra 视图的细化中定义的方法?

我在 gem 中定义了一个类,我通过改进向其中添加了一些方法(在 Ruby 2.3.0 中)。这个类出现在一些 Sinatra 视图 (haml) 中。

当我在帮助程序中引用这些额外的方法时,没有问题。但在视图中,我得到一个未定义的方法错误。

我错过了一个技巧,还是using ...声明需要去某个我无法到达的地方?

(解决方法:我可以定义帮助方法来返回对象上的方法。但如果我想这样做,那么我就不会使用改进......)

0 投票
1 回答
52 浏览

ruby - Ruby 枚举器“单一”方法

我真的需要使用类似于Single方法的东西,它:

返回序列的唯一元素,如果序列中不完全有一个元素,则抛出异常。

显然,为了方便起见,我可以添加扩展/改进。

但是类似的东西已经存在了吗?也许在 ActiveSupport 或其他库中?

0 投票
2 回答
247 浏览

ruby - 使用细化来修补核心模块,例如内核

我正在浏览 Facets API 并选择一些方法来包含在我的优化兼容补丁库中。

我在尝试修补内核时遇到了麻烦。它是一个模块,而我修补的其他东西是类(字符串、数组等)


这是无法使用我的核心类标准方法进行改进的证明:


我还尝试将内核模块包装在一个类中,并将对内核的全局引用更改为该类。


在这种情况下,我可以通过将 Kernel 替换为 Object 来成功获得相同的功能:

但我不确定我是否可以与其他核心模块(例如 Enumerable)获得这种等效性。

0 投票
1 回答
529 浏览

ruby - 如何从模块内的类中细化方法

我想优化位于模块内的类中的方法,但尽管尝试优化类,但我无法运行优化的代码:

输出: Original name: Forest Original name: Forest

0 投票
1 回答
129 浏览

ruby - 在 ruby​​ 细化块中组织一长段代码的最佳方法

当一个类被太多的连接方法细化时,我认为最好将它们提取到一个模块中。但是,在上面的示例中,当一个方法调用另一个方法时演示了一个问题(参见最后一条语句),它会产生以下错误。

在“start_end”中:“abcd”的未定义局部变量或方法“last”:String(NameError)

使用全局变量解决了类似的问题,这也适用于我的示例。但我正在寻找另一种更好的方法来组织被调用的方法,并避免全局性的事情。

如何建议更好的方法来组织这些方法?

0 投票
2 回答
237 浏览

ruby-on-rails - 是否可以使用 ruby​​ 改进来更改测试中控制器操作的行为?

是否可以使用细化功能来存根控制器操作?

我在“my_controller_refinement.rb”中定义细化

并在测试中使用它如下 -

测试目录为 -

但是细化并没有开始,实际的控制器动作似乎被调用了。

我是否遗漏了什么或者不能将改进用于这种“存根”?

0 投票
1 回答
178 浏览

haskell - 如何从具有类型相等约束的 Scott 编码的 GADT 中获取值?

我正在阅读24 天 GHC 扩展的 Rank-N-Types 部分,并遇到了以下 GADT:

尽管unSome它的类型变量是多态的,但可以向编译器证明,在这种SomeInt情况下,给给定值加三是安全的。作者将这种类型称为细化。

现在我很好奇我是否可以对 Scrott 编码类型做同样的事情。幸运的是,有一个这样的编码示例。我们只需要打开 Rank-N-Types 和 Type-Families 扩展:

但是,unSome文章中没有提供。我不精通 Haskell,也不知道如何使用 Scott 编码来实现这个功能。尤其是类型等式约束(例如(a ~ Int) =>)让我感到困惑。

感谢您提供有关其他在线资源的任何帮助或信息。

0 投票
1 回答
206 浏览

ruby - Ruby 改进的陷阱

Metaprogramming Ruby 2的第 2 章的“细化”部分中,我发现了以下 Ruby 代码:

据作者说:

然而,调用another_method 可能会让你措手不及:即使你调用another_methodafter using,对my_method自身的调用也会发生在之前using——所以它调用了原始的、未优化的方法版本。

这完全把我绊倒了。

为什么要MyClass.new.another_method打印“original my_method()”,因为它using MyClassRefinement是在之后使用的,作者在这里想说什么?

谁能提供更直观/更好的解释?

谢谢。

0 投票
1 回答
282 浏览

ruby - 细化 gem 的类方法

我必须以优雅和孤立的方式将一些行为包裹在外部宝石周围。鉴于下面的抽象,一切都运行顺利,但从来没有打印'bar'。有人能告诉我为什么吗?

我的代码:

宝石代码:

0 投票
1 回答
107 浏览

ruby - 细化和命名空间

尝试修补 net/http 并使其仅适用于一个服务类。改进似乎是要走的路。下面的猴子补丁有效,但改进无效。这是命名空间问题吗?该项目在 ruby​​ 2.3.0 上,但也尝试过 2.4.1,似乎只有猴子补丁被应用。

使用猴子补丁:

细化:

更新:

这似乎是类似的范围明智?显然,当 net/http 发出请求时,会发生更复杂的事情,那么它会失去作用域吗?

更新更新:

nvm,我知道现在发生了什么 :) 必须让你的大脑不要混淆usingmixins 的工作方式。