如果这样做:
Prelude Data.Char> map toUpper ("sdfsd" ++ "dfgfdg")
"SDFSDDFGFDG"
Run Code Online (Sandbox Code Playgroud)
那为什么不这样呢?
Prelude Data.Char> map toUpper . (++) "sdfsd" "dfgfdg"
<interactive>:1:14:
Couldn't match expected type `a -> [Char]'
against inferred type `[Char]'
In the second argument of `(.)', namely `(++) "sdfsd" "dfgfdg"'
In the expression: map toUpper . (++) "sdfsd" "dfgfdg"
In the definition of `it': it = map toUpper . (++) "sdfsd" "dfgfdg"
Run Code Online (Sandbox Code Playgroud) 我在Mac上使用黄瓜/水豚/硒/火狐.所有工作都很好,除了d&d.拖放可通过drag_node.drag_to(drop_node).调用时,它不会引发任何错误,但实际的拖放从未发生过.
现在,我发现这个示例应用程序(由显然有类似问题的人编写)证明了这个问题,而不是复制粘贴的碎片.
然而谷歌却没有意识到drag_to()被打破了.据我所见.这给了我一个希望,就是我错过了一些东西而不是一个bug.那是什么?我错过了什么?一个bug?
我们有一个用于铁轨项目的大型黄瓜套件.它都是水豚,主要是通过Firefox.
最近我们开始经历一次失败,我正在努力思考.这是它的样子:
visit陷入试图加载页面,而capybara最终会超时寻找任何正在寻找的元素(见下面的跟踪); 其他所有功能的后续访问也会超时;一个可能相关或不相关的细节:我们使用多个会话(capybara using_session),因此在失败时有三个firefox实例.但话说回来,有三个例子在此之前愉快地过去了.
同伴的行为出现在我队友的机器上.
rails日志中没有任何可疑之处.没有尝试通过该请求的迹象.
OSX 10.8.2,ruby 1.9.3,rails 3.2.6,sqlite3,最新的capybara/selenium.
错误堆栈跟踪:
Timeout::Error (Timeout::Error)
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/protocol.rb:132:in `readline'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:2551:in `read_new'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1316:in `catch'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1293:in `request'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1286:in `block in request'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:745:in `start'
/Users/artem/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:1284:in `request'
(eval):2:in `has_css?'
./features/step_definitions/home_page_steps.rb:70:in `/^I am taken to the products page on the retailer site$/'
features/home_page.feature:21:in `Then I am taken to the products page on the retailer site' …Run Code Online (Sandbox Code Playgroud) 似乎cuke没有显示完整的错误消息(至少在模板中出现问题时),这使得很难找到问题.
以下是它输出的一些错误:
...
And I am on checkout page # features/step_definitions/webrat_steps.rb:6
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.items (ActionView::TemplateError)
features/manage_orders.feature:9:in `And I am on checkout page'
...
以下是rails在浏览器中重现相同问题时显示的内容:
Showing app/views/cart/show.erb where line #46 raised:
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.items
Extracted source (around line #46):
43: </script>
44:
45: <% ths = %w{th_title th_price th_subtotal th_quantity}.collect {|th| t th.intern} %>
46: …Run Code Online (Sandbox Code Playgroud) 这是一个聪明的技巧,在ruby中启用哈希自动修复(取自facet):
# File lib/core/facets/hash/autonew.rb, line 19
def self.autonew(*args)
leet = lambda { |hsh, key| hsh[key] = new( &leet ) }
new(*args,&leet)
end
Run Code Online (Sandbox Code Playgroud)
虽然它有效(当然),但我发现我无法弄清楚这两个衬垫是如何做到的.
leet被置为默认值.所以,然后只是h['new_key']以某种方式访问它,并创建'new_key' => {}
现在,我希望h['new_key']返回默认值对象而不是评估它.也就是说,'new_key' => {}不会自动创建.那么leet实际上是如何被调用的呢?特别是有两个参数?
我正在构建Chrome扩展程序,在某些时候应该确定当前页面语言.为了做到这一点,我的计划是提取页面的文本内容(或至少部分内容)并将其传递给翻译API.然而,我找不到任何直接的方式来获取所有textNode的文件.
有一个备份计划是递归分析,$('body').contents()直到有足够的文本内容,但感觉有点不稳定.也许有更好的方法?
注意:Chrome扩展程序API允许您的脚本访问用户页面dom,就好像它是它的一部分一样.
在tmux命令模式下,以下内容创建新窗口并在其中打开vim:
:new-window vim
Run Code Online (Sandbox Code Playgroud)
退出vim时,窗口也会关闭.有没有办法让它留下来?
像缓冲切换一样轻的东西.所以我可以快速跳转并返回检查最后一个!命令的输出示例.
我知道有:sh,但是你必须退出它才能回到vim,所以它有点重.
我也知道http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window但我并不是分裂的忠实粉丝.
如果
*Main> :t concatMap
concatMap :: (a -> [b]) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)
和
*Main> :t replicate
replicate :: Int -> a -> [a]
Run Code Online (Sandbox Code Playgroud)
那怎么办呢?
*Main> :t concatMap . replicate
concatMap . replicate :: Int -> [b] -> [b]
Run Code Online (Sandbox Code Playgroud)
给定:
*Main> :t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)
?
我的意思是,我对函数组合的理解是replicate应该返回任何concatMap期望作为参数才能(.)工作.但事实并非如此.那捕获的是什么?