ruby - Ruby 中方法的静态局部变量?

标签 ruby variables methods static local

我有这个:

def valid_attributes
  { :email => "some_#{rand(9999)}@thing.com" }
end

Rspec 测试对吗?但我想做这样的事情:

def valid_attributes
  static user_id = 0
  user_id += 1
  { :email => "some_#{user_id}@thing.com" }
end

我不希望 user_id 可以从除该方法之外的任何地方访问, 这对 Ruby 来说可能吗?

最佳答案

这是一个关闭案例。试试这个

lambda {
  user_id = 0

  self.class.send(:define_method, :valid_attributes) do
    user_id += 1
    { :email => "some_#{user_id}@thing.com" }
  end

}.call

在 lambda 中包装所有内容允许在 lambda 中定义的变量仅存在于范围内。您也可以添加其他方法。祝你好运!

关于ruby - Ruby 中方法的静态局部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7168400/

相关文章:

c# - 将变量转换为常量

c# - Dynamics AX 动态调用非静态方法

java - 使用枚举和 switch 语句来控制方法执行

java - 将数值转换为罗马数字

ruby-on-rails - 事件管理员 : Customize only new form

Java - 创建包范围或全局变量的最佳实践

ruby - instance_eval、define_method 和 method_missing

javascript - 在正则表达式字符集中使用变量

ruby - 在大数组上进行加法的有效方法

ruby-on-rails - 未定义的方法 `get?' 为 302 :Integer