将procs分配给常量

时间:2013-06-08 12:49:50

标签: ruby lambda constants proc

我发现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

这是不好的做法吗?有陷阱吗?

1 个答案:

答案 0 :(得分:0)

这是一种不好的做法。在主级别定义常量与使用全局变量一样糟糕。这违背了面向对象编程(OOP)的目的。在OOP中,您希望尽可能隐藏不必要的东西。如果某些东西总是在字符串上起作用,那么它不应该在字符串的上下文之外访问,并且应该在String类上定义。如果某些东西总是提供某种形式的时间,则应该在Time类上定义,或者作为类或实例方法,具体取决于方法的性质。