gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:33:24 27 4
gpt4 key购买 nike

module Access
def last
self[-1]
end

def start_end
self[0] + last
end
end

module StringExt
refine String do
include Access
end
end

using StringExt

puts 'abcd'.last # => d
puts 'abcd'.start_end

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

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

类似issue是使用全局变量解决的,它也适用于我的示例。但我正在寻找另一种更好的方法来组织被调用的方法并避免全局化。

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

最佳答案

这是我最终使用的一般模式。基本上我没有找到在某种程度上使用全局标识符的解决方法。但这可以通过制作这些全局类/模块来相当干净地完成。举个例子会更清楚:

module StringPatches

def self.non_empty?(string)
!string.empty?
end

def non_empty?
StringPatches.non_empty?(self)
end

def non_non_empty?
!StringPatches.non_empty?(self)
end

refine String do
include StringPatches
end

end

class Foo
using StringPatches
puts "asd".non_empty? # => true
puts "asd".non_non_empty? # => false
end

StringPatches 上的类方法不会导出到 using。但是由于类/模块是常量(全局变量),它们可以从任何地方访问。

关于ruby - 在 ruby​​ 细化 block 中组织长代码的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43089442/

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