如何在调用方法时传递所有局部变量
How to pass all local variables when calling a method
我想知道是否有一种简单的方法可以在调用方法时传递所有局部变量,而不是将它们作为参数一个一个地传递。我想要以下内容:
class Greeting
def hello
message = 'HELLO THERE!'
language = 'English'
say_greeting
end
def konnichiwa
message = 'KONNICHIWA!'
language = 'Japanese'
say_greeting
end
private def say_greeting
puts message
end
end
Greeting.new.hello
显示HELLO THERE!
。但它 returns 一个错误:NameError: undefined local variable or method 'message'
.
我尝试 local_variables
将所有局部变量作为符号数组获取。但我似乎无法访问实际变量,因为似乎没有 Ruby 方法,如 local_variable_get
.
问题背景
在我的 Rails 应用程序中,我有一个控制器,它具有针对不同视图文件的三种更新方法。它们的行为完全相同(它们都将更新资源、显示错误(如果有)等)。他们唯一的主要区别是
- 不成功时要渲染的模板
- 成功后重定向url
- 闪现成功信息
我只有三个变量,所以将它们作为参数传递确实很容易,但我只是想知道是否有一个优雅的解决方案。
局部变量的作用恰恰不是您要执行的操作:将引用封装在方法定义中。实例变量可以准确地完成您想要做的事情:在单个对象的不同方法调用之间共享信息。您对局部变量的使用违背了这一点。
使用实例变量,而不是局部变量。
如果你坚持在方法之间引用局部变量,那么这里有一个方法:
class Greeting
def hello
message = 'HELLO THERE!'
language = 'English'
say_greeting(binding)
end
def konnichiwa
message = 'KONNICHIWA!'
language = 'Japanese'
say_greeting(binding)
end
private def say_greeting b
puts b.local_variable_get(:message)
end
end
你不能不传递任何参数,但你可以只传递一个绑定参数,并从那里引用所有局部变量。
将消息和语言作为实例变量。
然后你可以在私有方法中访问它们。
class Greeting
def hello
@message = 'HELLO THERE!'
@language = 'English'
say_greeting
end
def konnichiwa
@message = 'KONNICHIWA!'
@language = 'Japanese'
say_greeting
end
private
def say_greeting
puts @message
end
end
puts Greeting.new.hello
使用实例变量。在你的方法 say_greeting
中确保你首先调用方法 hello
,否则 @message
的值将是 nil
.
def hello
@message = "Hello there"
end
def say_greeting
hello #method call
puts message
end
我想知道是否有一种简单的方法可以在调用方法时传递所有局部变量,而不是将它们作为参数一个一个地传递。我想要以下内容:
class Greeting
def hello
message = 'HELLO THERE!'
language = 'English'
say_greeting
end
def konnichiwa
message = 'KONNICHIWA!'
language = 'Japanese'
say_greeting
end
private def say_greeting
puts message
end
end
Greeting.new.hello
显示HELLO THERE!
。但它 returns 一个错误:NameError: undefined local variable or method 'message'
.
我尝试 local_variables
将所有局部变量作为符号数组获取。但我似乎无法访问实际变量,因为似乎没有 Ruby 方法,如 local_variable_get
.
问题背景
在我的 Rails 应用程序中,我有一个控制器,它具有针对不同视图文件的三种更新方法。它们的行为完全相同(它们都将更新资源、显示错误(如果有)等)。他们唯一的主要区别是
- 不成功时要渲染的模板
- 成功后重定向url
- 闪现成功信息
我只有三个变量,所以将它们作为参数传递确实很容易,但我只是想知道是否有一个优雅的解决方案。
局部变量的作用恰恰不是您要执行的操作:将引用封装在方法定义中。实例变量可以准确地完成您想要做的事情:在单个对象的不同方法调用之间共享信息。您对局部变量的使用违背了这一点。
使用实例变量,而不是局部变量。
如果你坚持在方法之间引用局部变量,那么这里有一个方法:
class Greeting
def hello
message = 'HELLO THERE!'
language = 'English'
say_greeting(binding)
end
def konnichiwa
message = 'KONNICHIWA!'
language = 'Japanese'
say_greeting(binding)
end
private def say_greeting b
puts b.local_variable_get(:message)
end
end
你不能不传递任何参数,但你可以只传递一个绑定参数,并从那里引用所有局部变量。
将消息和语言作为实例变量。 然后你可以在私有方法中访问它们。
class Greeting
def hello
@message = 'HELLO THERE!'
@language = 'English'
say_greeting
end
def konnichiwa
@message = 'KONNICHIWA!'
@language = 'Japanese'
say_greeting
end
private
def say_greeting
puts @message
end
end
puts Greeting.new.hello
使用实例变量。在你的方法 say_greeting
中确保你首先调用方法 hello
,否则 @message
的值将是 nil
.
def hello
@message = "Hello there"
end
def say_greeting
hello #method call
puts message
end