And*_*imm 9 ruby switch-statement ruby-2.0
我记得case在Ruby 2.0的语句中允许使用procs ,但我不能谷歌.
我尝试检查Ruby 2.0.0 NEWS以及如何在Ruby中编写switch语句.我也访问过http://ruby-doc.org,但它对关键字的链接是针对Ruby 1.9而不是Ruby 2.0.
案件陈述中是否允许过程?
Phr*_*ogz 22
是.
2.0.0p0 :001> lamb = ->(x){ x%2==1 }
#=> #<Proc:0x007fdd6a97dd90@(irb):1 (lambda)>
2.0.0p0 :002> case 3; when lamb then p(:yay); end
:yay
#=> :yay
2.0.0p0 :003> lamb === 3
#=> true
2.0.0p0 :007> lamb === 2
#=> false
Run Code Online (Sandbox Code Playgroud)
然而,这与Proc#===当时定义的1.9.1没有什么不同.由于ruby-docs似乎在显示此方法时出现问题,因此要明确说明文档说proc === obj:
使用
objproc的参数调用块#call.它允许proc对象when成为case语句中的子句的目标.
对于Ruby初学者,whenRuby case语句中的子句接受子句中的值并在其上调用===方法,将参数传递给case语句.所以,例如,这段代码......
case "cats"
when /^cat/ then puts("line starts with cat!")
when /^dog/ then puts("line starts with dog!")
end
Run Code Online (Sandbox Code Playgroud)
...运行/^cat/ === "cats"以确定它是否匹配; 在RegExp类定义===来执行正则表达式匹配的方法.因此,when只要您===为子句定义,就可以在子句中使用自己的对象.
Moddable = Struct.new(:n) do
def ===(numeric)
numeric % n == 0
end
end
mod4 = Moddable.new(4)
mod3 = Moddable.new(3)
12.times do |i|
case i
when mod4
puts "#{i} is a multiple of 4!"
when mod3
puts "#{i} is a multiple of 3!"
end
end
#=> 0 is a multiple of 4!
#=> 3 is a multiple of 3!
#=> 4 is a multiple of 4!
#=> 6 is a multiple of 3!
#=> 8 is a multiple of 4!
#=> 9 is a multiple of 3!
Run Code Online (Sandbox Code Playgroud)