ruby – 如何在调用方法时传递所有局部变量
发布时间:2020-12-17 01:36:08 所属栏目:百科 来源:网络整理
导读:我想知道在调用方法时是否有一种简单的方法来传递所有局部变量,而不是逐个传递它们作为参数.我想要以下内容: class Greeting def hello message = 'HELLO THERE!' language = 'English' say_greeting end def konnichiwa message = 'KONNICHIWA!' language
我想知道在调用方法时是否有一种简单的方法来传递所有局部变量,而不是逐个传递它们作为参数.我想要以下内容:
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 如何显示你好!但它返回一个错误:NameError:未定义的局部变量或方法’message’. 我尝试使用local_variables将所有局部变量作为符号数组.但我似乎无法访问实际的变量,因为似乎没有像local_variable_get这样的Ruby方法. 问题的背景 在我的Rails应用程序中,我有一个控制器,它有三种不同视图文件的更新方法.所有这些行为完全相同(它们都会更新资源,显示错误,如果有的话等).他们唯一的主要区别是 >不成功时要呈现的模板 我只有三个变量,所以将它们作为参数传递确实很容易,但我只是想知道是否有一个优雅的解决方案. 解决方法
正确的局部变量不是您要做的事情:在方法定义中封装引用.实例变量正是您要做的事情:在单个对象上的不同方法调用之间共享信息.您对局部变量的使用与此相反.
使用实例变量,而不是局部变量. 如果你坚持在方法之间引用局部变量,那么这是一种方法: 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 你不能在没有传递任何参数的情况下创建它,但是你可以只传递一个绑定参数,并从那里引用所有局部变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |