我有一个像这样的字符串:
"foo=bar&bar=foo&hello=hi"
Run Code Online (Sandbox Code Playgroud)
Ruby on Rails是否提供了解析它的方法,就像它是一个查询字符串一样,所以我得到一个像这样的哈希:
{
:foo => "bar",
:bar => "foo",
:hello => "hi"
}
Run Code Online (Sandbox Code Playgroud)
或者我必须自己写吗?
请注意,上面的字符串不是来自URL的真实查询字符串,而是存储在来自Facebook Connect的cookie中的字符串.
我目前正在为我的SPA使用Backbone路由器.它有点工作,但我有一些小问题:
问题是-我想要么有pushState导航或没有,意思-应用程序状态被执行(当我通过"初始" URL路由器或我触发通过JS的路线),但地址栏不会改变.我不希望IE9的hashChange回退.如果IE9没有获得后退按钮和更改的地址栏,它仍将正常工作,但仍保留应用程序中的导航状态.然后,我可以向用户显示他们可以加入书签的URL,服务器将路由该页面,并且应用程序状态将根据初始URL进行引导.在应用内导航期间,IE中的地址栏不会改变,这是我愿意接受的妥协.
navigate(url, {trigger: true})我遇到的另一个问题是我用于拦截的HREF,后退按钮不起作用(什么都不做).但我真的需要在前进/后退导航中更改应用状态,即使它为特定URL重建 - 我宁愿重建状态.
对于我可以使用的路由器,我有哪些选择?就像我说的,我不希望有hashbang回退(意思是 - 我只想在应用程序中使用一种表示URL的方式).
我该怎么用?Director.js?History.js?似乎有相当多的路由器/历史库,但哪一个最接近我正在寻找的?
我有许多GLSL片段着色器,我几乎可以保证它们符合#version 120它们使用标准的,非ES符合的值,并且它们没有任何ES特定的编译指示.
我真的想使用WebGL为他们制作一个Web预览器.预览器不会在移动设备上使用.这可行吗?与GLSL版本相比,WebGL中的GLSL着色器是否限制了特征集?有精确的差异吗?
我已经尝试过玩了THREE.js但是这并没有真正磨擦它,因为它将我的着色器代码粘贴到GPU之前(我无法做到).
简而言之:GLSL规范是否足以让我运行这些着色器?...因为如果它不是我所追求的是不可行的我应该放弃它.
我有自己的HTTPS服务,我正在与另一个Ruby应用程序交谈.我想在我的app repo中的已知时间点保存它的公钥证书,并将服务发送给我的公钥与存储的副本进行比较.要在外部服务器上安装证书,我可能不得不将其转换为某种格式,因此服务器发送的文件不会相同.
我想对那个特定的公钥进行各种修改.我需要使用OpenSSL比较哪些证书字段来验证从服务收到的PK是否与从服务器收到的PK相同?
我想CN和签名必须至少匹配.还有什么需要检查才能知道我所拥有的公共证书与我收到的证书完全一致(即证书是否相同)?也许OSSL有一个内置的设施吗?
好的,我有一个坦白 - 我仍然运行大量的 FCGI 设置(只是配置了很多服务器)。我正在尝试使其适应 rvm。在 fcgi 设置中,我可以指定要执行的命令行命令来运行我的应用程序(Sinatra、Rack、Bundler 等等),这就是我在没有 rvm 的情况下所做的
"bin-path" => "bundle exec rackup",
"bin-environment" => (
"RACK_ENV" => "development"
),
Run Code Online (Sandbox Code Playgroud)
假设我的机架文件只是 config.ru。现在,在我的 Mac 上,这有效:
"bin-path" => env.HOME + "/.rvm/gems/ruby-1.9.2-p180/bin/bundle exec rackup " + CWD + "/config.ru",
"bin-environment" => (
"BUNDLE_GEMFILE" => CWD + "/Gemfile",
"RACK_ENV" => "development"
),
Run Code Online (Sandbox Code Playgroud)
但不在服务器上。当调度程序启动时,它们会得到一个精简的环境,其中 RVM 外壳技巧不再起作用。我想我应该使用包装器选项来制作某种包装器,但我真的不明白这将如何缓解我的问题以及使用哪些参数。有没有人在没有加载 RVM shell env 的情况下执行特定的 ruby 和 gem 二进制文件的经验?
PS 为了防止偏离主题的答案,不,谢谢,我不需要 Ruby 1.8.7、Passenger 或 nginx。
我有很多方法,我称之为:
with_this do
with_that do
and_in_this_context do
yield
end
end
end
Run Code Online (Sandbox Code Playgroud)
我记得有一个技巧来递归包装这样的块调用.我如何编写一个阻止包装的方法?
def in_nested_contexts(&blk)
contexts = [:with_this, :with_that, :and_in_this_context]
# ... magic probably involving inject
end
Run Code Online (Sandbox Code Playgroud) 我想定义一个采用关键字参数的方法。当不提供关键字参数时,我想提高它,我可以自己编写代码-但理想情况下,我想让Ruby为我做。我也希望能够使用来检查新定义的方法Method#parameters。如果我使用简写的double-splat(如**kwargs),那么我期望的实际结构将不可见parameters。
我当然可以这样做:
define_method(:foo) do | foo:, bar: |
# ...
end
Run Code Online (Sandbox Code Playgroud)
达到预期的结果:
method(:foo).parameters
# => [[:keyreq, :foo], [:keyreq, :bar]]
Run Code Online (Sandbox Code Playgroud)
但是我无法以编程方式传递这些参数,因此必须将它们逐字放置在代码中。有没有办法可以绕过这个?
我已经发布了很多图书馆.我还没有决定如何命名我的例外情况.Ruby标准库总是将例外命名为(例如,Exception或者名词Error) - 例如
相反,Rails使用缩短的异常名称,例如RecordInvalid等等.
如果我编写库,并且大多数都不与Rails相关,我应该使用哪种命名约定?我必须承认Rails"缩短名称"对我更有吸引力,因为当发生异常时你已经看到它是异常或某种错误,因为它会弹出日志/调试器/ stderr.
FileList使用下划线将列表(对象或其他数组式浏览器数据结构)转换为数组的最短方法是什么?
目前我使用这个(在 CoffeeScript 中):
files = _.map(fileList, (it)->it)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更短的方法。
想象一下,我有一份清单 ["a", "b", "c", "d"]
我正在寻找一个Pythonic习惯用于大致这样做:
for first_elements in head(mylist):
# would first yield ["a"], then ["a", "b], then ["a", "b", "c"]
# until the whole list gets generated as a result, after which the generator
# terminates.
Run Code Online (Sandbox Code Playgroud)
我的感觉告诉我,这应该存在于内置,但它正在逃避我.你会怎么做?
我有这个简单的正则表达式替换代码,其中包含一个块.当Ruby执行gsub时,匹配将传递给块,并且从块返回的任何内容都将用作替换.
string = "/foo/bar.####.tif"
string.gsub(/#+/) { | match | "%0#{match.length}d" } # => "/foo/bar.%04d.tif"
Run Code Online (Sandbox Code Playgroud)
有没有办法在Python中做到这一点,同时保持简洁?是否有支持lambdas或with语句的++ replace ++变体?
我有一个简单的设置
class Container {
Handler h;
}
Run Code Online (Sandbox Code Playgroud)
所有Container对象都有一个"warning()"方法.我想有一种方法从Handler对象中输出警告,但是使用包含对象的工具发送这些警告.
我确实意识到在包含的对象中持有对容器的引用是奇怪的(通常包含的对象不应该知道它的容器的任何内容).现在,在一个带闭包的语言中我会这样做(假想的语法):
h.set_warning_handler { | char* message |
this->warning(message)
}
Run Code Online (Sandbox Code Playgroud)
但我在C++工作,它不是一个像块一样使用Apple方言的地方.解决这个问题的首选方法是什么?或者只是设置参考并忘记它?
我有一个相对简单的算法,它走std :: vector寻找两个相邻的元组.一旦找到X值左右两侧的元组,我就可以在它们之间进行插值.不知何故,这有效:
std::vector<LutTuple*>::iterator tuple_it;
LutTuple* left = NULL;
LutTuple* right = NULL;
bool found = 0;
// Only iterate as long as the points are not found
for(tuple_it = lut.begin(); (tuple_it != lut.end() && !found); tuple_it++) {
// If the tuple is less than r2 we found the first element
if((*tuple_it)->r < r) {
left = *tuple_it;
}
if ((*tuple_it)->r > r) {
right = *tuple_it;
}
if(left && right) {
found = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
而这个:
std::vector<LutTuple*>::iterator tuple_it; …Run Code Online (Sandbox Code Playgroud) ruby ×6
block ×2
c++ ×2
python ×2
api ×1
arrays ×1
backbone.js ×1
boolean ×1
certificate ×1
coding-style ×1
composition ×1
env ×1
exception ×1
fastcgi ×1
generator ×1
https ×1
iteration ×1
javascript ×1
list ×1
null ×1
oop ×1
openssl ×1
parsing ×1
pointers ×1
pushstate ×1
query-string ×1
regex ×1
rvm ×1
shell ×1
ssl ×1
webgl ×1