问题标签 [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 - 是否可以使用在 Sinatra 视图的细化中定义的方法?
我在 gem 中定义了一个类,我通过改进向其中添加了一些方法(在 Ruby 2.3.0 中)。这个类出现在一些 Sinatra 视图 (haml) 中。
当我在帮助程序中引用这些额外的方法时,没有问题。但在视图中,我得到一个未定义的方法错误。
我错过了一个技巧,还是using ...
声明需要去某个我无法到达的地方?
(解决方法:我可以定义帮助方法来返回对象上的方法。但如果我想这样做,那么我就不会使用改进......)
ruby - Ruby 枚举器“单一”方法
我真的需要使用类似于Single方法的东西,它:
返回序列的唯一元素,如果序列中不完全有一个元素,则抛出异常。
显然,为了方便起见,我可以添加扩展/改进。
但是类似的东西已经存在了吗?也许在 ActiveSupport 或其他库中?
ruby - 使用细化来修补核心模块,例如内核
我正在浏览 Facets API 并选择一些方法来包含在我的优化兼容补丁库中。
我在尝试修补内核时遇到了麻烦。它是一个模块,而我修补的其他东西是类(字符串、数组等)
这是无法使用我的核心类标准方法进行改进的证明:
我还尝试将内核模块包装在一个类中,并将对内核的全局引用更改为该类。
在这种情况下,我可以通过将 Kernel 替换为 Object 来成功获得相同的功能:
但我不确定我是否可以与其他核心模块(例如 Enumerable)获得这种等效性。
ruby - 如何从模块内的类中细化方法
我想优化位于模块内的类中的方法,但尽管尝试优化类,但我无法运行优化的代码:
输出:
Original name: Forest
Original name: Forest
ruby - 在 ruby 细化块中组织一长段代码的最佳方法
当一个类被太多的连接方法细化时,我认为最好将它们提取到一个模块中。但是,在上面的示例中,当一个方法调用另一个方法时演示了一个问题(参见最后一条语句),它会产生以下错误。
在“start_end”中:“abcd”的未定义局部变量或方法“last”:String(NameError)
使用全局变量解决了类似的问题,这也适用于我的示例。但我正在寻找另一种更好的方法来组织被调用的方法,并避免全局性的事情。
如何建议更好的方法来组织这些方法?
ruby-on-rails - 是否可以使用 ruby 改进来更改测试中控制器操作的行为?
是否可以使用细化功能来存根控制器操作?
我在“my_controller_refinement.rb”中定义细化
并在测试中使用它如下 -
测试目录为 -
但是细化并没有开始,实际的控制器动作似乎被调用了。
我是否遗漏了什么或者不能将改进用于这种“存根”?
haskell - 如何从具有类型相等约束的 Scott 编码的 GADT 中获取值?
我正在阅读24 天 GHC 扩展的 Rank-N-Types 部分,并遇到了以下 GADT:
尽管unSome
它的类型变量是多态的,但可以向编译器证明,在这种SomeInt
情况下,给给定值加三是安全的。作者将这种类型称为细化。
现在我很好奇我是否可以对 Scrott 编码类型做同样的事情。幸运的是,有一个这样的编码示例。我们只需要打开 Rank-N-Types 和 Type-Families 扩展:
但是,unSome
文章中没有提供。我不精通 Haskell,也不知道如何使用 Scott 编码来实现这个功能。尤其是类型等式约束(例如(a ~ Int) =>
)让我感到困惑。
感谢您提供有关其他在线资源的任何帮助或信息。
ruby - Ruby 改进的陷阱
在Metaprogramming Ruby 2的第 2 章的“细化”部分中,我发现了以下 Ruby 代码:
据作者说:
然而,调用
another_method
可能会让你措手不及:即使你调用another_method
afterusing
,对my_method
自身的调用也会发生在之前using
——所以它调用了原始的、未优化的方法版本。
这完全把我绊倒了。
为什么要MyClass.new.another_method
打印“original my_method()”,因为它using MyClassRefinement
是在之后使用的,作者在这里想说什么?
谁能提供更直观/更好的解释?
谢谢。
ruby - 细化 gem 的类方法
我必须以优雅和孤立的方式将一些行为包裹在外部宝石周围。鉴于下面的抽象,一切都运行顺利,但从来没有打印'bar'。有人能告诉我为什么吗?
我的代码:
宝石代码:
ruby - 细化和命名空间
尝试修补 net/http 并使其仅适用于一个服务类。改进似乎是要走的路。下面的猴子补丁有效,但改进无效。这是命名空间问题吗?该项目在 ruby 2.3.0 上,但也尝试过 2.4.1,似乎只有猴子补丁被应用。
使用猴子补丁:
细化:
更新:
这似乎是类似的范围明智?显然,当 net/http 发出请求时,会发生更复杂的事情,那么它会失去作用域吗?
更新更新:
nvm,我知道现在发生了什么 :) 必须让你的大脑不要混淆using
mixins 的工作方式。