gpt4 book ai didi

ruby - 如何在调用方法时传递所有局部变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:47:36 29 4
gpt4 key购买 nike

我想知道是否有一种简单的方法可以在调用方法时传递所有局部变量,而不是将它们一个一个地作为参数传递。我想要以下内容:

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 应用程序中,我有一个 Controller ,它具有针对不同 View 文件的三种更新方法。它们的行为完全相同(它们都将更新资源、显示错误(如果有)等)。它们唯一的主要区别是

  1. 不成功时要呈现的模板
  2. 成功时重定向url
  3. 闪现成功信息

我只有三个变量,所以将它们作为参数传递确实很容易,但我只是想知道是否有一个优雅的解决方案。

最佳答案

局部变量的作用恰恰不是您要执行的操作:将引用封装在方法定义中。实例变量可以准确地完成您想要做的事情:在单个对象的不同方法调用之间共享信息。您对局部变量的使用违背了这一点。

使用实例变量,而不是局部变量。

如果你坚持在方法之间引用局部变量,那么这里有一个方法:

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

你不能不传递任何参数就做到这一点,但你可以只传递一个绑定(bind)参数,并从那里引用所有局部变量。

关于ruby - 如何在调用方法时传递所有局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35407063/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com