gsub 是全局替换,sub 只替换第一个,应用场景不一样,所以没有可比性。
不是没有可比性,而是说如果只需要替换第一个,就应该使用 sub
而不是 gsub
,否则效率会下降。
为什么直接赋值 更快呢
嗯,其实这个和 Proc#call v.s. yield
的道理是一样的,会产生新的数组对象,所以更慢。
Explicit versus implicit String concatenation
这个问题实际上也同理。"a" + "b"
就会产生两个对象,然后相加后就会产生第三个对象,而使用 "a" "b"
只用创建一个对象。
fast 3086600.4 (±7.8%) i/s - 15367098 in 5.012460s
append 3086374.5 (±9.1%) i/s - 15305635 in 5.007838s
another 3038806.7 (±9.9%) i/s - 15048810 in 5.010956s
从你的结果来看,还是 fast
更快啊,只是这几种写法差异没那么大就是了。
其实关于 String 还有一个要注意的是,尽量避免使用 str += 'a'
这种写法,而是用 str << 'a'
,道理一样,避免创建多个对象。
str.reverse == str
比如你生成的 csv 字符串为 csv_string
(编码为 utf-8).
那么在最后写入文件时,只要在文件头加上 Byte order mark,然后将字符串转换为 utf-16 little endian 编码即可。
代码大致是下面这样:
CSV_BOM = "\377\376"
require 'iconv'
class String
def utf8_to_utf_16
begin
Iconv.conv('UTF-16LE', 'UTF-8', self)
rescue
self
end
end
end
File.open(file_path, "w") { |file|
file.puts CSV_BOM + csv_string.utf8_to_utf16
}
推荐 11'.
我最初买 11' Air 主要是看了 Jason 的这篇 blog: A few product recommendations.
我用了这台 11' Air 差不多一年了吧,刚开始买来时开发时都是 外界显示器 + 机械键盘 + trackpad。
后来完全弃用了这些,一切都只在 11' 上完成。可能对于设计师来说,11' 的屏幕稍微小一些,但是对于工程师,尤其是 web 开发工程师,再合适不过了。
我刚才扫了一眼办公室,工程师用 Air 的都是 11' 的,共有 9 台,还有几个产品经理也都是用的 11'。
开发时是这样的:
做笔记的时候是这样的:
浏览网页的时候是这样的:
最后推荐一个窗口管理软件:Moom 。无论是 11', 13' 还是 15' 的 Pro,都该试用下 Moom 来管理你的窗口,尤其适用于经常连接/断开外接显示器的同学。
@xstmjh Preferences -> Advanced -> Conversation View 勾选 Show older messages first
.
@ery Use Bundler.setup in test/test_helper.rb
.
我目前的情况是本地用 rbenv, 线上 (公司) 用 rvm。但是它们的 gemset (rbenv 有 gemset 的 plugin) 功能都不用。
从来都是 bundle install --path=vendor/bundle --binstubs=.binstubs
。
Money 已解锁。
Path Finder 和 CleanMyMac 2 超值,Clarify 也很不错。
brew info redis
贴一下 .git/config
文件内容。
试用了一下,不过 the_silver_searcher
不支持 --nojs
这样的选项,略不爽。
ack 支持几乎所有 filetypes. ack --help-types
不读研了?准备去哪?
#2 楼 @ganweiliang 赞 之前一直被这个问题困扰....
NoMethodError: private method 'pri' called for #<Soap:0x0000000218b828>
报错的原因是传参数 other
就是你传进去的 Soap
实例,不传就是 s1
, 同样是 Soap
实例。而实例变量是无法调用 private
方法的。