我最近學習了Ruby編程語言,總而言之,它是一門好語言。但是令我驚訝的是,它并不像我期望的那么簡單。更準確地說,“最小驚喜規則”在我看來并不十分受人尊敬(當然,這是非常主觀的)。例如:x = true and falseputs x # displays true!和著名的:puts "zero is true!" if 0 # zero is true!您會警告Ruby新手的其他“陷阱”是什么?
3 回答

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
以下代碼使我感到驚訝。我認為這是一個危險的陷阱:既容易遇到,又難以調試。
(1..5).each do |number|
comment = " is even" if number%2==0
puts number.to_s + comment.to_s
end
打?。?/p>
1
2 is even
3
4 is even
5
但是如果我在塊之前添加comment =任何內容 ...
comment = nil
(1..5).each do |number|
comment = " is even" if number%2==0
puts number.to_s + comment.to_s
end
然后我得到:
1
2 is even
3 is even
4 is even
5 is even
基本上,當僅在塊內部定義變量時,然后在塊末尾銷毀該變量,然后nil在每次迭代時將其重置為。通常就是您所期望的。但是如果變量是該塊之前所定義,然后將外變量用于塊內,并且它的值是因此迭代之間持久的。
一種解決方案是改為編寫此代碼:
comment = number%2==0 ? " is even" : nil
我認為很多人(包括我在內)傾向于寫“ a = b if c”而不是“ a = (c ? b : nil)”,因為它更具可讀性,但顯然有副作用。
- 3 回答
- 0 關注
- 625 瀏覽
添加回答
舉報
0/150
提交
取消