#4 楼 @fbsender
这里面的@@a是属于顶层Object类的类变量
只是现象,不知道是什么原因。
class A
@@a = "It is @@a"
def get_a
puts @@a
end
end
obj = A.new
obj.get_a
obj.singleton_class.class_eval do
# 如果这里相当于Object.class_eval的话,为什么下面的get_a_singleton只属于obj?
@@a = 1
def get_a_singleton
puts @@a
end
end
obj.get_a_singleton
不过 singleton_class 作为一个只有一个实例匿名的类想不出 class variable 能有什么作用,所以从使用的角度来说这种场景应该不会出现。
因为前面的@@a 是 class A 的类变量,class << obj 里面的@@a 是 obj 的 singleton class 里的@@a,加上
obj.singleton_class.class_eval do
@@a = 1
end
这个@@a 才是 obj.get_a_singleton 能读到的@@a
只学 ruby 的话很简单。要学 ror 的话,纯 ruby 的只是能占 40% 么……
ETL 工具都带这些功能吧
records = []
File.open('xxx.csv') do |f|
first_line = true
f.each_line do |line|
if first_line
@headers = line.chomp.split(',')
first_line = false
else
record = {}
line.chomp.split(',').each_with_index do |value, idx|
record[@headers[idx]] = value
end
records << record
end
end
end
# 白菜名
records.group_by {|record| record["Name"]}.each do |name, _records|
if @max.to_i < _records.size
@max = _records.size
@baicai_name = name
end
end
p @baicai_name, @max
# 邮箱后缀
@max = 0
records.group_by {|record| record["EMail"][/@.*$/]}.each do |email_suffix, _records|
if @max.to_i < _records.size
@max = _records.size
@baicai_email_suffix = email_suffix
end
end
p @baicai_email_suffix, @max
```ruby
你开网页有没有加代理。
#11 楼 @woody1983 你是说 extend 么
x = Thread.new { sleep 0.1; print "x"; print "y"; print "z" } a = Thread.new { print "a"; print "b"; sleep 0.2; print "c" } sleep 1
你可以先写个方法,使不同的值得到同一个 key
class Calculator [[:add, :+], [:subtract, :-], [:divide, :/], [:multiply, :], [:power, :*]].each do |m| define_method(m[0]) {|a, b| a.send(m[1], b)} end end
可以参考 Enumerable#group_by
t.gsub(/^(\d+):(\d+):(\d+)/, '\1-\2-\3')