相关疑难解决方法(0)

在Ruby中,|| =(or-equals)是什么意思?

以下代码在Ruby中的含义是什么?

||=
Run Code Online (Sandbox Code Playgroud)

它的语法是否有任何意义或原因?

ruby operators

325
推荐指数
9
解决办法
9万
查看次数

为什么我可以引用从未运行的if/unless/case语句之外的变量?

为什么以下代码不会抛出错误?

if false
  x = 0
end

x  #=> nil
Run Code Online (Sandbox Code Playgroud)

以下确实会引发错误:

y  # NameError: undefined local variable or method `y' for main:Object
Run Code Online (Sandbox Code Playgroud)

unless&casestatements 也会发生同样的事情.

ruby

17
推荐指数
1
解决办法
1530
查看次数

在Ruby中,为什么在启动irb之后,foo.nil?说未定义的错误,@ foo.nil?给出"真实"和@@ wah.nil?再次出错?

在Ruby 1.8.7和1.9.2中也是如此:

$ irb

ruby-1.8.7-p302 > foo.nil?
NameError: undefined local variable or method `foo' for #<Object:0x3794c>
    from (irb):1

ruby-1.8.7-p302 > @bar.nil?
 => true 

ruby-1.8.7-p302 > @@wah.nil?
NameError: uninitialized class variable @@wah in Object
    from (irb):3
Run Code Online (Sandbox Code Playgroud)

为什么实例变量的处理方式与本地和类变量不同?

ruby instance-variables local-variables class-variables

13
推荐指数
1
解决办法
1346
查看次数

Ruby中的变量范围

考虑以下两个ruby代码片段.

puts "One"
if false
  d = 1
end
puts "Two"
puts d
puts "Three"
Run Code Online (Sandbox Code Playgroud)

这将打印以下内容

One
Two

Three
Run Code Online (Sandbox Code Playgroud)

现在,请考虑以下内容

[].each do |i|
  flag = false
end
puts "Two"
puts flag
puts "Three"
Run Code Online (Sandbox Code Playgroud)

这给出了以下内容

Two
'<main>': undefined local variable or method 'flag' for main:Object (NameError)
Run Code Online (Sandbox Code Playgroud)

为什么在第一种情况下打印空白而第二种情况会抛出错误?

谢谢

ruby

5
推荐指数
1
解决办法
310
查看次数

Ruby:未定义的局部变量OK如果在不同的代码路径中定义?

有人可以检查一下我注意到的这种行为吗?

如果您没有为局部变量分配任何内容并尝试将其打印出来,则会按预期生成异常.如果在无法访问的代码路径中分配局部变量,则它可以正常工作.应该是这样的吗?

def a
  # Should generate an error because foobar is not defined.
  puts foobar
end

def b
  # This block never is run but foobar is entered into the symbol table.
  if false
    foobar = 123
  end

  # This succeeds in printing nil
  puts foobar
end

begin; a; rescue Exception => e; puts "ERROR: #{e.message}"; end
begin; b; rescue Exception => e; puts "ERROR: #{e.message}"; end
Run Code Online (Sandbox Code Playgroud)

ruby variables

3
推荐指数
1
解决办法
162
查看次数

与错误的`if`块内的赋值操作混淆

我正在玩if积木中的任务操作,并发现了以下结果,这让我感到惊讶:

C:\>irb --simple-prompt
if false
x = 10
end
#=> nil
p x
nil
x.object_id
#=> 4
#=> nil
p y
NameError: undefined local variable or method `y' for main:Object
        from (irb):5
        from C:/Ruby193/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,您可以看到x已创建局部变量,即使它仅被分配给falsy if块.我想看到的内容xp x这迫使我相信,分配却没有这样做,而是x变量存在.x.object_id也证明了这种情况.

现在我的问题是如何x创建局部变量,即使if块入口点是故意关闭的?

我期望输出p x类似于输出p y.但相反,我得到了一个惊人的答案p x.

有人可以向我解释这个概念是如何运作的吗?

编辑

不,这是另一个测试.仅local变量不是这种情况.同样的事情instanceclass变量也发生了.见下文:

class Foo
  def show
    @X …
Run Code Online (Sandbox Code Playgroud)

ruby if-statement nameerror

3
推荐指数
1
解决办法
314
查看次数