在Sinatra中,我无法创建在应用程序生命周期中仅赋值一次的全局变量.我错过了什么吗?我的简化代码如下所示:
require 'rubygems' if RUBY_VERSION < "1.9"
require 'sinatra/base'
class WebApp < Sinatra::Base
@a = 1
before do
@b = 2
end
get '/' do
puts @a, @b
"#{@a}, #{@b}"
end
end
WebApp.run!
Run Code Online (Sandbox Code Playgroud)
这导致了
nil
2
Run Code Online (Sandbox Code Playgroud)
在终端和,2浏览器中.
如果我尝试@a = 1输入initialize方法,我会收到错误WebApp.run!.
我觉得我错过了一些东西,因为如果我不能拥有全局变量,那么如何在应用程序实例化期间加载大数据呢?
before do 似乎每次有来自客户端的请求时都会调用它.
我有一个ruby应用程序,我使用warbler编译成一个jar.我可以使用像这样的命令独立运行它java -jar executable.jar.但是我无法弄清楚如何在Java代码中使用这个jar.具体来说,我想在Java代码中创建Ruby类的对象,然后调用方法.
在Ruby中,是否可以使用任何方法识别对象o在类层次结构中是否具有类C作为其祖先?
我在下面给出了一个例子,我用一种假设的方法has_super_class?来完成它.我该怎么做呢?
o = Array.new
o[0] = 0.5
o[1] = 1
o[2] = "This is good"
o[3] = Hash.new
o.each do |value|
if (value.has_super_class? Numeric)
puts "Number"
elsif (value.has_super_class? String)
puts "String"
else
puts "Useless"
end
end
Run Code Online (Sandbox Code Playgroud)
预期产出:
Number
Number
String
Useless
Run Code Online (Sandbox Code Playgroud)