options = {}
options[:url] = "好看"
options[:host] = "我喜欢"
options[:customer] = {}
options[:customer][:name] = "爱死了"
options[:customer][:number] = "越看越喜欢"
options[:customer][:bills] = []
options[:customer][:bills] << {number: "白", memo: "漂亮"}
options[:customer][:bills] << {number: "富", memo: "漂亮"}
options[:customer][:bills] << {number: "美", memo: "漂亮"}
options[:comments] = []
options[:comments] << "有人说酱紫冗余"
options[:comments] << "的确有点,不过我依然喜欢酱紫"
options = {
url: "注意!结尾必须写逗号",
host: "如果不写逗号,那么会报错",
customer: {
name: "逗号很小, 不明显, 不小心删掉了,都很难发现",
number: "结尾还有很多括号, 好崩溃呀",
bills: [
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"},
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"},
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"}, #这个逗号不会报错 神奇吧
] # 最后一个元素可以不写逗号
}, # 最后一个元素可以写逗号
}
options = {
url: "注意!结尾必须写逗号" ,
host: "如果不写逗号,那么会报错" ,
customer: {
name: "逗号很小, 不明显, 不小心删掉了,都很难发现" ,
number: "结尾还有很多括号, 好崩溃呀" ,
bills: [{
number: "苦逼", memo: "苦逼苦逼苦逼苦逼" },{
number: "苦逼", memo: "苦逼苦逼苦逼苦逼" },{
number: "苦逼", memo: "苦逼苦逼苦逼苦逼" },]},}
options = {
url: "注意!结尾必须写逗号"
,host: "如果不写逗号,那么会报错"
,customer: {
name: "逗号很小, 不明显, 不小心删掉了,都很难发现"
,number: "结尾还有很多括号, 好崩溃呀"
,bills: [
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"}
,{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"}
,{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"}
]
}
}
如果你不需要团队,代码永远只是你自己维护,你爱怎么写怎么写。如果不是,请按惯例写。另外我也不认为你的写法好,第一,增加亢余定义,第二,对顺序有依赖,第三,本来是一个赋值被你改成了运算。
options = {}
options[:url] = "好看"
options[:host] = "我喜欢"
options[:customer] = {}
options[:customer][:name] = "爱死了"
options[:customer][:number] = "越看越喜欢"
options[:customer][:bills] = []
options[:customer][:bills] << {number: "白", memo: "漂亮"}
options[:customer][:bil1s] << {number: "富", memo: "漂亮"}
options[:customer][:bills] << {number: "美", memo: "漂亮"}
大家一起来找错
options = {
url: "注意!结尾必须写逗号",
host: "如果不写逗号,那么会报错",
customer: {
name: "逗号很小, 不明显, 不小心删掉了,都很难发现",
number: "结尾还有很多括号, 好崩溃呀",
bills: [
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"},
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"},
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"}, #这个逗号不会报错 神奇吧
] # 最后一个元素可以不写逗号
} # 最后一个元素可以写逗号
}
大家一起来找错
慕容绝技 之 斗转星移
bills = []
bills << {number: "白", memo: "漂亮"}
bills << {number: "富", memo: "漂亮"}
bills << {number: "美", memo: "漂亮"}
customer = {}
customer[:name] = "爱死了"
customer[:number] = "越看越喜欢"
customer[:bills] = bills
options = {}
options[:url] = "好看"
options[:host] = "我喜欢"
options[:customer] = customer
喜好正好相反。第一种:
其实 Hash 或者 Array 遵循一条规则 始终打逗号 即可。最坑爹的是 JavaScript 这种最后一个元素不能打逗号的,配合 ExtJS 这种拿 POJO 当配置的框架就是要人命。
#16 楼 @nightire 请问你说的是 Sublime RubyCheckOnSave https://packagecontrol.io/packages/RubyCheckOnSave
我以前没听说过,也没用过,干菜试了一下,果然不同反响。
$ python
Python 2.7.8 (default, Oct 19 2014, 16:02:00)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.54)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> [1,2,3]
[1, 2, 3]
>>> [1,2,3,]
[1, 2, 3]
>>> {'a': 1, 'b': 2,}
{'a': 1, 'b': 2}
#26 楼 @cuterxy 呵呵,不做主观评价谁好谁坏,事实上我也经常用 Jetbrains 家的各种 IDE,我只能说大家都不错,但是不至于“好多了”,也许是因为你不太会配置 Vim 吧?Vim 可以做到和 Jetbrains 一样好,其他的语言我不熟,但至少 Ruby/Javascript 是如此。我举个例子吧,比如说 WebStorm 做语法检查是用什么呢?它允许你使用 JSHint JSLing ESLint 等等常用的语法检查器,IDE 所做的就是把反馈集成到 Editor 的窗口里。那么 Vim 也一样啊,比如说我用的 Syntastic,它本身只是一个语法检查的驱动器,它的功能就是第一:允许为任何一种语言指定一个或多个语法检查器;第二:允许你配置这些语法检查器如何工作,以及 Vim 如何进行反馈。
IDE 会把这些事情事先为你做好,也可以提供给你一定的选项做调整,这自然是极好的,然而你无法做出超出 IDE 能力以外的设置。可是 Vim 不同,它可以做出更多的可控性,对于大多数程序员来说是“没有 Vim 做不到,只有你想不到”。比如说我用 Vim 可以让语法检查的结果反馈通过 Growl 或 Notification 通知给出来——这不算什么,IDE 想做到也不难,但是如果把反馈换成调用操作系统的语音引擎输出呢?甚至可以转换多语言进行语音播报呢?当然 IDE 能做到,但是值不值得去做,给不给你去做,这些是掌握在 IDE 的厂商手中的;而 Vim 是允许你掌握在自己手中的。
我举的这个例子可不是脑洞大开,事实上去年末在日本举办了一个 Vim 爱好者的会议,这个语音反馈提示已经有人做出来了,YouTube 上有现场视频,该作者展示了用日本语反馈单元测试结果的 Demo,真的很牛。
所以说语法检查、自动补全之类的事情对 Vim 来说也不算个事,IDE 会专门针对这些做优化并且让开发者开箱即用这当然是好事,Vim 想要配置到这个水准当然不容易,这是它的劣势。然而不能因此说 Vim 不如 xxx 之类的,这就有点无脑喷了。
require 'benchmark'
def test1
options = {}
options[:url] = "好看"
options[:host] = "我喜欢"
options[:customer] = {}
options[:customer][:name] = "爱死了"
options[:customer][:number] = "越看越喜欢"
options[:customer][:bills] = []
options[:customer][:bills] << {number: "白", memo: "漂亮"}
options[:customer][:bills] << {number: "富", memo: "漂亮"}
options[:customer][:bills] << {number: "美", memo: "漂亮"}
options[:comments] = []
options[:comments] << "有人说酱紫冗余"
options[:comments] << "的确有点,不过我依然喜欢酱紫"
end
def test2
options = {
url: "注意!结尾必须写逗号",
host: "如果不写逗号,那么会报错",
customer: {
name: "逗号很小, 不明显, 不小心删掉了,都很难发现",
number: "结尾还有很多括号, 好崩溃呀",
bills: [
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"},
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"},
{number: "苦逼", memo: "苦逼苦逼苦逼苦逼"}, #这个逗号不会报错 神奇吧
] # 最后一个元素可以不写逗号
}, # 最后一个元素可以写逗号
}
end
n = 5000000
Benchmark.bm do |x|
x.report { n.times { test1 } }
x.report { n.times { test2 } }
end
shanshan:~/tmp$ ruby test.rb
user system total real
17.210000 0.030000 17.240000 ( 17.240030)
14.190000 0.010000 14.200000 ( 14.208981)
测试环境:Mac OS X 10.9.5, Ruby 2.1.5
#34 楼 @ShiningRay +1 感谢你的测试数据 不过有点小问题,我做了一些调整
require 'benchmark'
def test1
options = {}
options[:url] = "TEST"
options[:host] = "TEST"
options[:customer] = {}
options[:customer][:name] = "TEST"
options[:customer][:number] = "TEST"
options[:customer][:bills] = []
options[:customer][:bills] << {number: "TEST", memo: "TEST"}
options[:customer][:bills] << {number: "TEST", memo: "TEST"}
options[:customer][:bills] << {number: "TEST", memo: "TEST"}
end
def test2
options = {
url: "TEST",
host: "TEST",
customer: {
name: "TEST",
number: "TEST",
bills: [
{number: "TEST", memo: "TEST"},
{number: "TEST", memo: "TEST"},
{number: "TEST", memo: "TEST"},
]
},
}
end
n = 500000
Benchmark.bm do |x|
x.report { n.times { test1 } }
x.report { n.times { test2 } }
end
sl410:Desktop (ruby-2.2.0)(master) ruby test.rb
user system total real
4.510000 0.000000 4.510000 ( 4.845243)
3.920000 0.000000 3.920000 ( 4.193255)
除非 Ruby 解释器有别的魔法,1 条指令生成的 Hash 效率肯定比生成一个空 Hash 再一个一个 allocate 内存效果高的多。
可曾听说过 过早优化是万恶之源 我承认我喜欢的写法,比,我讨厌的写法,更消耗 CPU 性能。 但是牺牲的那点性能,值得关注吗? 我觉得大部分的情况下,不需要关注。
@ery query = { :query => { :filtered => { :query => { :multi_match => { :fields => ["title", "content"], :query => "呵呵" } } } } } 那么这个呢?
after_format
query = {
:query => {
:filtered => {
:query => {
:multi_match => {
:fields => ["title", "content"],
:query => "呵呵"
}
}
}
}
}