如果条件,ruby多个块

时间:2017-10-27 08:04:59

标签: ruby devise

我在设计中找到了这段代码

Windows-1251

更新。 有人可以向我解释为什么条件有两个块

  

if validate(resource){hashed = true;   resource.valid_password?(密码)}

3 个答案:

答案 0 :(得分:2)

不是if条件有两个块。 {}附带的块用于validate方法。

BTW这个hashed = true局部变量赋值在这种情况下似乎没用。

答案 1 :(得分:2)

def validate(p)
  puts "YAY" if block_given?
  false
end

if validate(42){} # ⇐ block being passed to validate
  puts "NEVER PRINTED" # since `validate` returned `false`
end

#⇒ "YAY"

答案 2 :(得分:1)

在Ruby中,if 一个method,您(因此)无法将block argument传递给它,因此:

if foo(bar) { baz }
  # do something
end

相当于:

condition = foo(bar) { baz }

if condition
  # do something
end

您还可以使用{ ... }块替换上述do ... end

if foo(bar) do
    baz
  end
  # do something
end

这只是为了演示目的,请不要写这样的代码。

上述内容仍然相当于:

condition = foo(bar) do
  baz
end

if condition
  # do something
end