Chrome 17中Dev Tools的搜索窗口似乎不再匹配CSS选择器.嘘.我知道我可以使用JS控制台,但它真的,真的帮助我在DOM的上下文中看到匹配.如果有人知道我仍然可以实现这一点,或者如何恢复到之前的(即我昨天的那个)版本的Chrome我会很感激.
我最近发现Ruby(2.2.1)有一些"有趣"的行为.
module Foo
class Foo
end
class Bar
end
end
Foo.const_get('Foo') #=> Foo::Foo
Foo.const_get('Bar') #=> Foo::Bar
Foo.const_get('Foo::Foo') #=> Foo
Foo.const_get('Foo::Bar') #=> NameError: uninitialized constant Foo::Foo::Bar
Foo.const_get('Foo::Foo::Bar') #=> Foo::Bar
Foo.const_get('Foo::Foo::Foo::Bar') #=> NameError: uninitialized constant Foo::Foo::Bar
Foo.const_get('Foo::Foo::Foo::Foo::Bar') #=> Foo::Bar
Foo.const_get('Foo::Foo::Foo') #=> Foo::Foo
Foo.const_get('Foo::Foo::Foo::Foo') #=> Foo
Foo.const_get('Foo::Foo::Foo::Foo::Foo') #=> Foo::Foo
Foo.const_get('Foo::Foo::Foo::Foo::Foo::Foo') #=> Foo
Run Code Online (Sandbox Code Playgroud)
这有点令人惊讶.我的理解是const_get首先在接收器的常量集合中查找常量,然后查看Object的常量.好的.那么为什么Foo#const_get上面的第四个失败而第三个失败呢?
我也很好奇为什么要Foo#const_get根据::Foo你添加的数量来调用模块和类之间的替换.
我一直在试图弄清楚如何扩展initialize模块的行为.我想这样做而不会调用initialize正在混入的类中的超级.我想支持正常的呼叫模式,include我无法弄明白.我已经阅读了我能找到的关于这个问题的所有内容,虽然有人提出建议,但实际上它们似乎都没有(至少在我手中).
这是我(我想)我知道的:
include(即Module.included(base))来完成.include钩子将执行之前,包括类定义initialize,所以没有点无非是想确定initialize用base.instance_eval,因为它会被覆盖.有人建议使用method_added钩子并在那里处理它.这就是我现在正在尝试但看起来钩子在方法定义的开头执行,所以你最终会得到你在下面看到的内容.
module Mo
def self.included(klass)
klass.instance_eval do
def method_added(method)
puts "Starting creation of #{method} for #{self.name}"
case method
when :initialize
alias_method :original_initialize, :initialize
puts "About to define initialize in Mo"
def initialize
original_initialize
puts "Hello from Mo#initialize"
end
puts "Finished defining initialize in Mo"
end
puts "Finishing creation of #{method} for #{self.name}"
end
end
end
end …Run Code Online (Sandbox Code Playgroud)我看过RubyConf 2013关于Pry的演讲,我决定我应该试一试.
我正在使用一些大型数组.如果Pry以IRB的方式显示返回的数组,那么使用我的代码会更容易.奇怪的是,如果显示的数组中的字符数很少,pry将不会添加换行符,但是当显示的数组中的字符数超过某个阈值时,它会添加它们(在我的情况下似乎是26个字符).有人知道怎么让Pry停止这样做吗?
IRB:
main 001(0) > a = [] #=> []
main 002(0) > (1..100).each{|i| a << i} #=> 1..100
main 003(0) > a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, …Run Code Online (Sandbox Code Playgroud) 我正在尝试开发与Selenium一起使用的CSS选择器.特别是我想使用伪类:contains().虽然W3有一个CSS3草案,其中包含:contains(),但最终版本似乎没有包含它.
我正在使用Chrome的工具来帮助我检查我的CSS选择器,并确保我做得对.Chrome似乎没有实现:contains(),这是可以理解的.
有没有我可以使用的工具,可以让我尝试在我们的网页上使用:contains()的选择器?
我正在使用带狮子的Mac.我也可能仅限于使用Firefox 3.5.7(我被告知现在不推迟更新).
我正在将数万个文档从一种标记格式(显然是RUNOFF的一些后代,我有很少的文档)转换成可以提供给LaTeX的东西.此过程的一部分涉及在每个文档中搜索旧标记格式中具有特殊含义的每个字符串,并将其替换为LaTeX的相应字符串.这些有数百种.到目前为止,我的两个想法是将每个作为一个单独的gsub或者使用正则表达式创建一个gsub,它将匹配(通过ORing)许多符号,然后将匹配传递给带有大型case语句的方法支持适当的替代.从表面上看,第二种方式减少了每个文档必须扫描的次数,但正则表达式中OR的开销可能更昂贵.有没有人知道哪种方法更好,或者我错过了一个好方法?
以下是我所描述的两种方式的示例.它们可能不完美.试着说明我的观点.
方法1:
output.gsub!(/a<-"/, '\\"{a}') # ä
output.gsub!(/a<-^/, '\\^{a}') # â
output.gsub!(/a<-~/, '\\~{a}') # ã
...etc
Run Code Online (Sandbox Code Playgroud)
方法2:
output.gsub!(/a<-"|a<-^|a<-~|etc/) {|match| convert_symbol(match)}
def convert_symbol(input)
case match
when 'a<-"'
'\\"{a}' # ä
when "a<-^"
'\\^{a}' # â
when "a<-~"
'\\~{a}' # ã
when 'etc'
'\\LaTeX...etc'
end
end
Run Code Online (Sandbox Code Playgroud) 我有几个方法接受许多(关键字)参数,这些参数最终将相同的参数集传递给另一个方法。
以下是正常的。
def foo(a:, b:, c:, d:, e:)
bar('var', a:a, b:b, c:c, d:d, e:e)
end
# takes the same arguments as #foo + one more
def bar(var, a:, b:, c:, d:, e:)
...
end
Run Code Online (Sandbox Code Playgroud)
这只是有点乏味和烦人。我想知道 Ruby 核心中是否有任何东西可以轻松执行以下操作...
def foo(a:, b:, c:, d:, e:)
bar('var', <something that automagically collects all of the keyword args>)
end
Run Code Online (Sandbox Code Playgroud)
我知道你可以解析method(__method__).parameters,做一些体操,并将所有东西打包成一个哈希,可以被双重分割并传递给bar. 我只是想知道核心中是否已经有一些东西以一种很好的、整洁的方式做到了这一点?
如果有一些东西以更一般的方式适用,即不仅适用于关键字 args,那当然也很有趣。
有没有办法强制Git将文件版本存储为完整且独立的实体,而不是作为来自上游提交的差异存在的下游提交?
有人会问我为什么要这样做.我想这样做是因为老板告诉我这样做.FWIW,有问题的特定文件是一个过程的产物,其中输入中的一个小变化可能导致文件的重大重组.