将 + 号放在 ruby​​ 中的正数前面

Posted

技术标签:

【中文标题】将 + 号放在 ruby​​ 中的正数前面【英文标题】:Put + sign in front of positive numbers in ruby 【发布时间】:2020-08-23 22:43:05 【问题描述】:

我喜欢在正数之前显示一个加号。示例

2.to_s
# returns +2

-2.to_s
# returns -2

【问题讨论】:

你想在任何正数被字符串化时自动执行此操作吗? 您遇到问题的代码是什么?你的代码有什么问题?您收到错误消息吗?错误信息是什么?你得到的结果不是你期望的结果吗?你期望什么结果,为什么,你得到的结果是什么,两者有什么不同?您正在观察的行为不是期望的行为吗?期望的行为是什么,为什么,观察到的行为是什么,它们有何不同?请提供minimal reproducible example。请注意Stack Overflow不是写代码服务,你需要努力! 你想要+0 还是0? (鉴于零不是正数) 【参考方案1】:

Kernel#sprintf+ 标志一起使用:

sprintf('%d', 11)
# 11
sprintf('%+d', 11)
# +11

或等效地,String#%:

'%+d<x>' %  x: 23 
# +23

【讨论】:

【参考方案2】:

您可以对Numeric 使用相当直接的猴子补丁:

class Numeric
  def to_ss   # to signed string
    self.negative? ? self.to_s : "+#self.to_s"
  end
end

2.to_ss   # => "+2"
-2.to_ss  # => "-2"
5.7.to_ss # => "+5.7"

如果有更优雅的方法,我不会感到惊讶,但这是可行的。

【讨论】:

使用refinement,而不是猴子补丁。这是一个作用域猴子补丁。

以上是关于将 + 号放在 ruby​​ 中的正数前面的主要内容,如果未能解决你的问题,请参考以下文章