我发现procs和lambdas可以用作短方法和辅助模块的替代品。我将不属于任何其他地方的方法放入一个文件中,该文件只是分配给常量的一个proc列表。例如,helper_procs.rb
需要文件init.rb
,其中包含以下内容:
RED_TEXT = proc{|t| "\e[31m#{t}\e[0m"}
GREEN_TEXT = proc{|t| "\e[32m#{t}\e[0m"}
YELLOW_TEXT = proc{|t| "\e[33m#{t}\e[0m"}
CURRENT_TIME = proc do
date = Time.now.to_s.split(' ')[0].split('-').reverse.join('-')
time = Time.now.to_s.split(' ')[1]; "#{time} (#{date})"
end
然后,在程序的任何地方(在不同的文件中),我这样做:
puts GREEN_TEXT["A string!"]
puts CURRENT_TIME.call
这是不好的做法吗?有陷阱吗?
答案 0 :(得分:0)
这是一种不好的做法。在主级别定义常量与使用全局变量一样糟糕。这违背了面向对象编程(OOP)的目的。在OOP中,您希望尽可能隐藏不必要的东西。如果某些东西总是在字符串上起作用,那么它不应该在字符串的上下文之外访问,并且应该在String
类上定义。如果某些东西总是提供某种形式的时间,则应该在Time
类上定义,或者作为类或实例方法,具体取决于方法的性质。