Tag: 变量

如何声明RSpec中的示例之间共享的变量?

假设我有以下规范: … describe Thing do it ‘can read data’ do @data = get_data_from_file # [ ’42’, ’36’ ] expect(@data.count).to eq 2 end it ‘can process data’ do expect(@data[0].to_i).to eq 42 # Fails because @data is nil end end … 我想要的只是在给定的描述或上下文中共享一个变量。 我会在一个例子中写一个值,然后在另一个例子中读取它。 我怎么做?

ruby变量作为同一个对象(指针?)

>> a = 5 => 5 >> b = a => 5 >> b = 4 => 4 >> a => 5 如何将’b’设置为’a’,以便在示例中,变量a也将变为4。 谢谢。

正常变量与Ruby中的实例变量有什么不同?

考虑以下示例ruby类 class User def hello puts “hello” end end 现在,用于初始化。 有两种方法 正常变量 1.9.3p125 > tr = User.new => # 1.9.3p125 > tr.hello Hello world => nil` 实例变量: 1.9.3p125 > @tr = User.new => # 1.9.3p125 > @tr.hello Hello world => nil 现在,在这两种情况下它都是一样的。 那么正常变量和实例变量有什么区别?

ruby:如何在本地上下文中加载.rb文件

如何在Ruby中完成这个简单的任务? 我有一些简单的配置文件 === config.rb config = { ‘var’ => ‘val’ } 我想从main.rb文件中定义的某个方法加载配置文件,以便config.rb中的局部变量成为该方法的本地变量。 像这样的东西: === main.rb Class App def loader load(‘config.rb’) # or smth like that p config[‘var’] # => “val” end end 我知道我可以在config.rb使用全局变量然后在完成后config.rb定义它们,但我希望有一种ruby方式)

在什么情况下我应该使用实例变量而不是其他变量类型?

我正在使用Ruby on Rails 3,我想知道在什么情况下我应该使用实例变量而不是其他变量类型,如果有安全原因那些。 例: # Using an instance variable @accounts = Account.find(…) # Using a “local”\”normal” variable account = Account.find(…)

标记未使用的块变量

当存在不使用的块或局部变量时,有时人们用*标记它,有时用_标记。 {[1, 2] => 3, [4, 5] => 6}.each{|(x, *), *| px} {[1, 2] => 3, [4, 5] => 6}.each{|(x, _), _| px} {[1, 2, 3], [4, 5, 6]}.each{|*, x, *| px} {[1, 2, 3], [4, 5, 6]}.each{|_, x, _| px} def (x, *), *; px; end def (x, _), _; px; end def *, […]

更改ruby变量/引用的值

我偶然发现了一些我不太了解的事情。 我知道ruby中的变量是引用。 所以很棒的东西是可能的。 但是当我将变量传递给方法时,它表现得很奇怪: my_var_a = “nothing happend to me” my_var_b = “nothing happend to me” def parse_set(my_var_set) my_var_set = “my value changed” end def parse_sub(my_var_sub) my_var_sub.sub! /(.*)/, “my value changed” end parse_set(my_var_a) parse_sub(my_var_b) my_var_a # => “nothing happend to me” my_var_b # => “my value changed” 你能解释一下为什么它适用于sub! 和=保持对象不变? 我怎么能避免使用sub! 但结果相同?

Ruby 1.9.3使用eval定义var

我在Ruby中编写类似REPL的东西,我需要在运行中定义变量。 我想通了我应该使用eval,但这里是从irb会话中摘录来测试它的。 在1.9.3(那将在1.8中工作) > eval ‘a = 3′ => 3 > a => NameError: undefined local variable or method `a’ for main:Object 他们将1.9改为: > eval ‘a = 3’ => 3 > eval ‘a’ => 3 所以似乎从1.9开始改变它。 如何使用eval(或类似的东西)在1.9.3中定义变量?

使用class_eval和instance_eval访问Ruby类变量

我有以下内容: class Test @@a = 10 def show_a() puts “a: #{@@a}” end class << self @@b = '40' def show_b puts "b: #{@@b}" end end end 为什么以下工作: Test.instance_eval{show_b} b: 40 => nil 但我不能直接访问@@b ? Test.instance_eval{ @@b } NameError: uninitialized class variable @@b in Object 同样,以下工作 t = Test.new t.instance_eval{show_a} a: 10 => nil 但是以下失败了 t.instance_eval{ […]

在Ruby中,可以显式创建局部变量

例如 x = 123 p = Proc.new { x = ‘I do not want change the value of the outer x, I want to create a local x’ } 在Ruby中是否有与Perl中的“my”关键字相同的东西?