gpt4 book ai didi

ruby - 包装 block 以使用细化

转载 作者:数据小太阳 更新时间:2023-10-29 09:02:23 26 4
gpt4 key购买 nike

鉴于以下细化:

module StringRefinement
refine String do
def bar
length
end
end
end

我想使用我的改进实现一个模块来执行 block :

module Demo
using StringRefinement

def self.wrap(*args, &block)
instance_eval(&block)
end
end

现在我应该可以像这样使用它了:

Demo.wrap { puts "some text".bar }

哪个不起作用:-(

我一直在研究 block 绑定(bind)、yield、context、singleton_class...但我仍然无法让它工作。我该怎么做?

最佳答案

您需要将 using StringRefinement 语句移到模块之外。

检查文档中的以下段落:

You may only activate refinements at top-level, not inside any class, module or method scope.

http://ruby-doc.org/core-2.1.1/doc/syntax/refinements_rdoc.html#label-Scope

关于ruby - 包装 block 以使用细化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32268827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com