【问题标题】:Ruby: Confusion about defining methodsRuby:关于定义方法的困惑
【发布时间】:2013-09-09 17:51:54
【问题描述】:
def secret_formala(PH)
    jelly_beans = PH * 500
    jars = jelly_beans / 1000
    crates = jars / 100
    return jelly_beans, jars, crates
end

start_point = 10000
beans, jars, crates = secret_formala(start_point)

puts "With a starting point of: #{start_point}"
puts "We'd have #{beans} beans, #{jars} jars, and #{crates} crates."

start_point = start_point / 10

puts "We can also do that this way:" 
puts "We'd have %s beans, %s jars, and %s crates." % secret_formala(start_point)
puts

所以,这是我的代码和我的困惑,这对其他人来说可能看起来很明显,但由于我对 Ruby 还是很陌生,所以它逃脱了我。我不明白的是第 1 行和第 2 行“def secret_formula(PH)”和“jelly_beans = PH * 500”

我可以用任何东西代替“PH”并且它可以工作,但是代码如何理解我有“PH”的地方正在使用“start_point”数字?为什么我没有收到错误?在第 1 行的“def secret_formula(PH)”之后的“()”中添加任何内容有什么意义?

【问题讨论】:

  • 请注意,在 Ruby 中,以大写字母开头的变量被视为常量。 (PH 在你的情况下)
  • 很难准确理解您的要求。您是在问,基本上,方法是如何工作的?

标签: ruby methods function


【解决方案1】:
def secret_formala(PH)

def 关键字决定了这是否是 ruby​​ 中的方法。它以 end 关键字结尾。

括号中的内容,在本例中为 PH,这就是您在调用该方法时传递给该方法的内容。例如,如果您将其称为secret_formula(10),则下一行将在代码内部读取jelly_beans = 10 * 500。您并不总是需要在方法定义中有括号。这是因为您可能不会总是将另一个值传递给此方法。你可能有一个方法,它只是在内部做一些事情,而不给它任何额外的信息。 PH 本身在这里并不重要,它只是您用于传递它的值的名称。如果您愿意,可以将其命名为“你好”。

【讨论】:

  • 我实际上选择了“PH”,因为我看到我在“()”中输入的内容并不重要,所以“PH”实际上对我来说是“占位符”。是否可以安全地假设“()”中的 with 只是另一个代码的占位符?
  • 它并不是真正的占位符。如果您确实计划将可能更改的值传递给它,那么您只想在括号中放入一些东西。例如,如果您总是乘以 10*500,则不需要 PH,您可以将其保留为数字 10。
  • 如果您知道您的 PH 号码会根据您调用方法的时间而改变,您可以将其保留在那里并在调用方法时传入一个值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 2012-08-26
相关资源
最近更新 更多