【问题标题】:How does ruby do the + operator?ruby 如何做 + 运算符?
【发布时间】:2014-08-22 18:49:46
【问题描述】:

Ruby 不支持像variable++ 这样的递增变量。我看到了这种行为:

2 ++ 4

给出6。事实上,两个变量之间的任意数量的+ 符号都被视为一个+。红宝石是如何做到这一点的?而既然 ruby​​ 是这样做的,那是否可以作为 ++ 运算符不可用的原因呢?

【问题讨论】:

  • 2 +- 4 也可以工作......出于某种原因
  • @MxyL:那是因为它是2 + (-4),所以你得到了一元- 运算符(又名-@ 方法)。
  • 2 +- 4 !!如果我这样做了,我会理解工作的! :)

标签: ruby operators increment post-increment


【解决方案1】:

用 += 代替 ++ 例子: a=2 a+=3 放一个

5

【讨论】:

  • 是的,但为什么 ++ 有效?或 ++++++++++ 就此事。请注意,您甚至可以说8 +---------- 3,它仍然是有效的操作
  • += 作品是已知的。我只是想知道多重加号的奥秘。 :)
【解决方案2】:

这个:

2 ++ 4

被解析为:

2 + (+4)

所以第二个+ 是一元加号。添加更多加号只会添加更多一元 + 运算符,因此:

2 ++++++ 4

被视为:

2 + (+(+(+(+(+(+4))))))

如果您在Fixnum 中提供您的+@ 方法:

class Fixnum
  def +@
    puts 'unary +'
    self
  end
end

然后你甚至可以看到它发生:

> 2 ++ 4
unary +
 => 6 

【讨论】:

  • 覆盖代码 sn-p 有问题吗?对我不起作用。
  • 你说的是2 ++ 4还是2 ++4? Ruby 对空格很敏感。您还会注意到+4 不会调用+@,解析器本身会在方法有机会被调用之前将其转换为4
  • Ruby 的哪个版本以及您如何检查?
  • 1.8.7 。进入 irb 并在那里使用你的代码。
  • 我什至没有可用的 1.8.7,也许你应该使用更新的 Ruby。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2012-08-04
  • 2016-06-27
  • 2013-07-04
相关资源
最近更新 更多