什么是看起来像方法调用的ruby/rails语法?
问题描述:
我知道我失去了一些东西简单,但在这里,导轨导向表明,可以出现在session_store.rb下面的示例配置:什么是看起来像方法调用的ruby/rails语法?
Rails.application.config.session_store :cookie_store, key: '_your_app_session', domain: ".example.com"
它看起来像一个方法的调用:session_store与ARGS。然而session_store似乎实际上是ActionDispatch::Session::ActiveRecordStore
的一个实例。
那么,这里究竟发生了什么?
答
当执行
Rails.application.config.session_store
#=> ActionDispatch::Session::ActiveRecordStore
你调用的session_store
方法。 ActionDispatch::Session::ActiveRecordStore
是方法的返回值,而不是方法本身。而且,由于ActiveRecordStore
是一类,它并没有回应source_location
:
Rails.application.config.session_store.source_location
#=> NoMethodError: undefined method `source_location' for ActionDispatch::Session::CookieStore:Class
在JavaScript(和其他语言),函数可以通过它的名称通过附加括号引用,并呼吁:
function foo() {
return 123;
}
foo // function() { return 123; }
typeof foo // "function"
foo() // 123
typeof foo() // "number"
在Ruby然而,调用方法时,括号是可选的,既foo
和foo()
调用方法:
def foo
123
end
foo #=> 123
foo.class #=> "fixnum"
foo() #=> 123
foo().class #=> "fixnum"
要获取Method
对象对某个方法的名称,你必须调用method
方法上的接收器:
method(:foo) #=> #<Method: Object#foo>
你的情况:
Rails.application.config.method(:session_store)
#=> #<Method: Rails::Application::Configuration#session_store>
Rails.application.config.method(:session_store).source_location
#=> [".../gems/railties-4.2.6/lib/rails/application/configuration.rb", 163]
它是一个方法调用,'ActionDispatch :: Session :: ActiveRecordStore'是方法的返回值。 – Stefan
谢谢。我似乎无法找到Rails :: Application :: Configuration或其父母记录的此方法。它应该是?我尝试了'Rails.application.config.session_store.source_location'来试图确定它的定义。 – Noob123
尝试'Rails.application.config.method(:session_store).source_location',它应该指向[.../gems/railties-4.2.6/lib/rails/application/configuration.rb:163](https: //github.com/rails/rails/blob/v4.2.6/railties/lib/rails/application/configuration.rb#L163) – Stefan