【问题标题】:Dynamic Constant Assignment error in Ruby [duplicate]Ruby中的动态常量分配错误[重复]
【发布时间】:2015-05-27 15:54:53
【问题描述】:

我有以下红宝石代码:

# calculates GST
def calculateGST(price)
GSTpaid = price * 0.15
return GSTpaid
end

puts "Enter a value: "
cost = gets.chomp.to_f

GSTpaid = calculateGST(cost)
costNoGST = cost - GSTpaid

puts """
Cost:         #{cost}
GST included: #{GSTpaid}
cost no GST:  #{costNoGST}
"""

这会在第 4 行返回一个动态常量赋值错误。 我使用 python 编写了完全相同的程序并且运行良好,所以我很想知道为什么它在 Ruby 中不起作用??

当我这样做的时候,有没有办法将 Ruby 代码 sn-ps 插入到帖子中?我只看到 HTML、CSS 和 JavaScript 的选项,所以我继续使用 JS。

【问题讨论】:

  • 通常,Snippets 用于可执行的 JavaScript(就像 jsfiddle 或 jsbin),可以在浏览器中运行。运行 Ruby(或任何不是 JavaScript 的东西)要困难得多。通常,非 JS 代码将被简单地格式化为代码(四个空格缩进,或 select 和 ctrl-K)。

标签: ruby


【解决方案1】:

你得到这个错误是因为你试图创建一个常量,非常量。一旦它被分配,你就不能回去改变它。您可以将其重构为仅使用局部变量而不是常量:

def calculateGST(price)
  price * 0.15
end

puts "Enter a value: "
cost = gets.chomp.to_f

gst_paid = calculateGST(cost)
cost_no_gst = cost - gst_paid

puts """
Cost:         #{cost}
GST included: #{gst_paid}
cost no GST:  #{cost_no_gst}
"""

【讨论】:

  • 我明白为什么我会收到错误,但我很困惑为什么它在 python 上有效,但在 ruby​​ 上无效。
  • 我的 Python 并不完全符合标准,但我相信这是因为 python 并没有像 Ruby 那样真正具有“常量”。您可以使用大写或小写的名称分配事物,这应该没有区别。在 Ruby 中,大写赋值表示一个常量,一旦赋值就无法更改。
  • 就是这样 ;) 我没有意识到以大写字母开头会这样做。感谢您解决这个问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多