def record
return unless @supported
klasses = profile_options[:formats].map { |f| RubyProf.const_get("#{f.to_s.camelize}Printer") }.compact
klasses.each do |klass|
fname = output_filename(klass)
FileUtils.mkdir_p(File.dirname(fname))
File.open(fname, 'wb') do |file|
klass.new(@data).print(file, profile_options.slice(:min_percent))
end
end
end
Run Code Online (Sandbox Code Playgroud)
我理解'klass'用于防止命名空间与关键字'class'冲突,但为什么在此代码中需要'klass'或'class'(来自Rails :: ActiveSupport) - 它们的目的是什么?什么是klass用于这里?或者,如果使用了类,为什么需要它呢?什么是klass/class?
在下面列出的第一个方法中,使用方法,它看起来像:ins是一个实例变量,attr是一个为:ins提供getter和setter的方法.我不确定的是它的@ins << lambda作用.
module Rack
class Builder
attr :ins
def use(middleware, *args, &block)
middleware.instance_variable_set "@rack_builder", self
def middleware.rack_builder
@rack_builder
end
@ins << lambda { |app|
middleware.new(app, *args, &block)
}
end
def run(app)
klass = app.class
klass.instance_variable_set "@rack_builder", self
def klass.rack_builder
@rack_builder
end
@ins << app #lambda { |nothing| app }
end
def leaf_app
ins.last
end
end
end
Run Code Online (Sandbox Code Playgroud) s = Proc.new {|x|x*2}
puts s.call(5)
-> 10
def foo(&a)
a.call(5)
end
puts "test foo:"
foo(s)
Run Code Online (Sandbox Code Playgroud)
当我尝试调用上面的proc时,我得到:
foo: wrong number of arguments (1 for 0) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
我的期望是,如果使用此类签名定义方法,我可以将proc传递给方法:
def foo(&a)
Run Code Online (Sandbox Code Playgroud)
然后我可以像这样执行proc insiide foo:
a.call(5)
Run Code Online (Sandbox Code Playgroud) 我曾在Java世界的Death March项目中工作过- 由于管理不善和笨重,复杂的技术,通常跨越多个系统并且通常与瀑布方法相关联的项目,注定会从一开始就失败的项目.
Rails和Django被吹捧为敏捷开发技术,这意味着他们的目标是能够快速响应变化.
这是否意味着他们对大型企业系统的Death March场景免疫?或者Rails/Django项目是否还有足够的复杂性,它可能像Java项目一样失控?