Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中,如何在没有方法调用的情况下将变量传递到参数中?_Ruby_Variables_Methods_Parameters_Arguments - Fatal编程技术网

在Ruby中,如何在没有方法调用的情况下将变量传递到参数中?

在Ruby中,如何在没有方法调用的情况下将变量传递到参数中?,ruby,variables,methods,parameters,arguments,Ruby,Variables,Methods,Parameters,Arguments,给定以下代码: def method words = "33" return words end def callmethod words = method result = printout(words) end def printout(words) puts (words) end callmethod #will print out --> "33" (words from method) Ruby如何识别变量words是方法调用(callmethod

给定以下代码:

def method
  words = "33"
  return words
end

def callmethod
  words = method
  result =  printout(words)
end

def printout(words)
  puts (words)
end

callmethod #will print out --> "33" (words from method)

Ruby如何识别变量
words
是方法调用(
callmethod
)的一部分,而它没有被显式调用?在本例中,我特别提到的这一行result=
printout(words)
。这个函数似乎在提取变量词(method的返回值),即使我没有使用method调用显式地将其放入。有人能给我解释一下这是怎么可能的吗?

callmethod
中,method
words
是一个局部变量,其值为method
method
的返回值

打印输出(words)
按预期工作,因为您正在向其传递一个局部变量
words
的值,即字符串
“33”


在Ruby中,调用方法时,方法名()是可选的。如果您碰巧有一个与方法同名的局部变量,为了让Ruby知道您想要调用一个方法,而不是获取局部变量的值,您可以说
method\u name()
。但是有一个更好的/推荐的选项-
self.method\u name

callmethod
words中是一个局部变量,其值为method
method
的返回值

打印输出(words)
按预期工作,因为您正在向其传递一个局部变量
words
的值,即字符串
“33”


在Ruby中,调用方法时,方法名()是可选的。如果您碰巧有一个与方法同名的局部变量,为了让Ruby知道您想要调用一个方法,而不是获取局部变量的值,您可以说
method\u name()
。但是有一个更好的/推荐的选项-
self.method\u name

words=method
words=method()
相同。您正在调用名为
method
的方法,因此
words
现在将包含值
33
。您认为行
words=method
在做什么,如果不调用
方法
并将返回值存储在名为
单词
的新局部变量中,
单词
在所有三种方法中都可用,因为您可以在局部声明和定义它,或者将其作为参数传入。每次使用
单词
都是有效的,因为您已经明确地将其提供给用户使用,没有方法“抓取”另一个方法的局部变量。我还是不知道你的困惑在哪里<代码>单词在
方法
中显式定义,在
调用方法
中显式定义,并显式传递到
打印输出
。这些变量都不是同一个变量,它们只是碰巧具有相同的名称和值。每个都是使用它的方法的局部。仅供参考,您的代码可以用唯一的变量名重写,这可能会消除您的一些困惑:@programmer321每次ruby看到变量名时,它都会用变量的内容替换该名称。不管变量是在表达式中还是作为函数的参数。此规则的唯一例外是为变量赋值。在这种情况下,变量将获得一个新值。在(几乎)所有其他情况下,Ruby用变量的内容替换变量的名称。
words=method
words=method()
相同。您正在调用名为
method
的方法,因此
words
现在将包含值
33
。您认为行
words=method
在做什么,如果不调用
方法
并将返回值存储在名为
单词
的新局部变量中,
单词
在所有三种方法中都可用,因为您可以在局部声明和定义它,或者将其作为参数传入。每次使用
单词
都是有效的,因为您已经明确地将其提供给用户使用,没有方法“抓取”另一个方法的局部变量。我还是不知道你的困惑在哪里<代码>单词在
方法
中显式定义,在
调用方法
中显式定义,并显式传递到
打印输出
。这些变量都不是同一个变量,它们只是碰巧具有相同的名称和值。每个都是使用它的方法的局部。仅供参考,您的代码可以用唯一的变量名重写,这可能会消除您的一些困惑:@programmer321每次ruby看到变量名时,它都会用变量的内容替换该名称。不管变量是在表达式中还是作为函数的参数。此规则的唯一例外是为变量赋值。在这种情况下,变量将获得一个新值。在(几乎)所有其他情况下,Ruby都会将变量的名称替换为其内容。尽管您可以添加大括号,但实际上您几乎从未这样做:
self.x
是大多数样式指南推荐的样式,而不是
x()
。你能举一个例子吗?也许可以用上一个例子来说明如何用self.x重写它吗?@programmer321在这种情况下,它没有多大意义,因为它是不必要的,但下一个例子与你所拥有的是等价的:
def callmethod words=self.method result=self.printout(words)end
尽管你可以添加大括号,实际上,你几乎从不这样做:
self.x
是大多数样式指南推荐的样式,而不是
x()
。你能举一个例子吗?也许可以用前面的例子来说明如何用self.x重写它?@programmer321在这种情况下,它没有多大意义,因为它是不必要的,但是下一个与您所拥有的相同:
def callmethod words=self.method result=self.printout(words)end