在Ruby中,我正在构建一个构造并返回一个(可能很大)数组的方法,该数组应该不包含重复的元素.通过使用一个集合然后将其转换为数组,我会获得更好的性能吗?或者.uniq在返回之前调用我正在使用的数组会更好吗?或者使用&将项目附加到数组而不是+=?如果我确实使用了一个集合,那么<=>我放入集合的对象上的方法是否会对性能产生影响?(如果你不确定,你知道一种测试方法吗?)
好的,所以我想在Ruby中做一些元编程,我有点困惑.根据我读过的几篇文章(像这一篇),为了动态地将类方法添加到Ruby类中,你必须使用类的单例类:
class Klass
end
class << Klass
self.define_method(:foo) { return "foo" }
end
Run Code Online (Sandbox Code Playgroud)
这是为什么,与此有何不同?
class Klass
self.define_method(:foo) { return "foo" }
end
Run Code Online (Sandbox Code Playgroud)
(对不起,如果这个问题包含任何错误的假设.就像我说的,我有点困惑.)
在git merge命令的文档中,结果git merge topic如下所示:
A---B---C topic
/ \
D---E---F---G---H master
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它在我看来,如果我要删除topic以使我的分支列表保持整洁,那么提交A,B和C的所有记录都将丢失,只留下一个提交,H(并且可能会删除所有提交消息)来自A,B和C):
D---E---F---G---H master
Run Code Online (Sandbox Code Playgroud)
确实如此,如果是这样,我该如何预防呢?例如:
D---E---F---G---A---B---C master
Run Code Online (Sandbox Code Playgroud) 好的,所以我试图在VBA for Excel中编写一个简单的脚本,根据用户在电子表格的单元格中选择的某个值来更改AutoFilter.到目前为止,它一直很好,但现在我收到以下错误,我无法弄清楚是什么导致它:
运行时错误'91':对象变量或未设置块变量
请记住,这是我第一次尝试在VBA中编写任何内容,因此我对该语言不是很熟悉.我对Excel非常熟悉,而且我了解其他几种编程语言(Java,JavaScript,Ruby,LUA).
这是我写的代码; 错误发生在第9行.
Private Sub Worksheet_Change(ByVal Target As Range)
'' Review Level Changed ''
If Target.Address = Worksheets("Sheet1").Range("review_level").Address Then
' MsgBox "You just changed " & Target.Address & " to " & Target.Value ' Debug
Dim oldProtection As Protection
If Worksheets("Sheet1").ProtectContents = True Then
oldProtection = Worksheets("Sheet1").Protection ' It errors out here
Worksheets("Sheet1").Unprotect
End If
If Target = "B" Then
ActiveSheet.ListObjects("review_checklist").Range.AutoFilter Field:=2, _
Criteria1:=Array("B", "C", "D"), Operator:=xlFilterValues
ElseIf Target = "C" Then
ActiveSheet.ListObjects("review_checklist").Range.AutoFilter Field:=2, …Run Code Online (Sandbox Code Playgroud) irb(main):009:0> a = "good"
=> "good"
irb(main):010:0> a = "good" + "morning"
=> "goodmorning"
irb(main):011:0> a = "good"
=> "good"
irb(main):012:0> a << " morning"
=> "good morning"
Run Code Online (Sandbox Code Playgroud)
到现在为止,两个concatenation运营商都运作良好.
irb(main):013:0> a = "good"
=> "good"
irb(main):014:0> a.freeze
=> "good"
irb(main):015:0> a.frozen?
=> true
irb(main):016:0> a << " welcome"
RuntimeError: can't modify frozen String
from (irb):16
from /usr/bin/irb:12:in `<main>'
irb(main):017:0> a = a + " welcome"
=> "good welcome"
Run Code Online (Sandbox Code Playgroud)
但是对于一个frozen字符串,从中可以清楚地看到差异IRB,<<并且+表现不像他们应该的那样.谁能告诉我这个的原因?
假设我得到一些字符串输入,我想知道它是否包含一个Integer或一个Float.
例如:
input_1 = "100"
input_2 = "100.0123"
Run Code Online (Sandbox Code Playgroud)
现在,让我们考虑以下内容:
input_1.respond_to?(:to_f) # => true
input_1.is_a?(Float) # => false
input_1.is_a?(Fixnum) # => false
input_1.to_f? # => 100.0
input_2.respond_to?(:to_i) # => true
input_2.is_a?(Integer) # => false
input_2.is_a?(Fixnum) # => false
input_2.to_i # => 100
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我们无法确定字符串是否包含a Integer或a Float.Ruby中是否有办法确定字符串是否包含a Fixnum或Float?