为了账号安全,请及时绑定邮箱和手机立即绑定

应该警告新手的Ruby Gotchas是什么?

应该警告新手的Ruby Gotchas是什么?

繁星点点滴滴 2019-12-07 16:47:22
我最近学习了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

打印:


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)”,因为它更具可读性,但显然有副作用。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 580 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信