【发布时间】:2016-02-15 10:36:00
【问题描述】:
我想知道是否有一种简单的方法可以在调用方法时传递所有局部变量,而不是一个一个地作为参数传递。我想要以下内容:
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!。但它返回一个错误:NameError: undefined local variable or method 'message'。
我尝试local_variables 将所有局部变量作为符号数组获取。但我似乎无法访问实际变量,因为似乎没有像 local_variable_get 这样的 Ruby 方法。
问题背景
在我的 Rails 应用程序中,我有一个控制器,它具有三种用于不同视图文件的更新方法。它们的行为完全相同(它们都将更新资源、显示错误(如果有)等)。他们唯一的主要区别是
- 不成功时要渲染的模板
- 成功时重定向网址
- 刷写成功消息
我只有三个变量,所以将它们作为参数传递确实很容易,但我只是想知道是否有一个优雅的解决方案。
【问题讨论】:
-
message应该与attr_accessor :message一起使用,或者通过像@message这样的前缀来使用实例变量。私有方法可以访问与公共方法相同的变量。 private 和 public 只设置其他类可以使用的权限。 -
我不希望该变量可在类外访问。放置 attr_accessor :message 将允许我做我不想要的
Greeting.new.message。 -
然后通过在消息前加上@来使用实例变量。或者您也可以将 attr_accessor 设为私有,然后只能从实例内部访问它
-
不,没有办法。好吧,
binding对象可能有一些的方法,因为 ruby 就是这样——但它会过于复杂,即使它很简单也不是一个好主意。
标签: ruby local-variables