我在设计中找到了这段代码
Windows-1251
更新。 有人可以向我解释为什么条件有两个块
if validate(resource){hashed = true; resource.valid_password?(密码)}
答案 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