什么类型的说明可以放在什么时候?我的一些代码在if / else下工作,但在大小写的情况下不起作用。
例如
def categories(massIndex)
case massIndex
when >= 30.0
"obese"
#[some instructions like this]
else
"error"
end
end
我总是看到这样的错误:
bmi.rb:8: syntax error, unexpected >=
when >= 30.0
但是当我使用if / else时,它可以工作:
def categories(massIndex)
if massIndex >= 25
"something"
else
"error"
end
end
我可以使用案例修复它,还是必须使用if / else?
答案 0 :(得分:4)
case x
when y
puts "y"
when z
puts "z"
end
相当于
if y === x
puts "y"
elsif z === x
puts "z"
end
例如
case "hello"
when Array
puts "Array"
when String
puts "String"
end
#=> "String"
x = "hello"
if Array === x
puts "Array"
elsif String === x
puts "String"
end
#=> "String"
注意:
Array.method(:===).owner
#=> Module
String.method(:===).owner
#=> Module
请参阅Module#===。
所以当你写
case massIndex
when >= 30.0
"obese"
...
Ruby尝试评估
(>= 30.0) === massIndex
导致她引发语法错误。
此处的另一个示例说明了方法===
的有用性。
case "spiggot"
when /cat/ then "cat"
when /dog/ then "dog"
when /pig/ then "pig"
end
#=> pig
由于
/cat/.method(:===).owner
#=> Regexp
请参阅Regexp#===。
Here是关于case
声明的优秀文章。
答案 1 :(得分:2)
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.app import App
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string('''
<CustomPopup>:
size_hint: .5, .5
auto_dismiss: False
title: 'Hello world'
BoxLayout:
text_input: text_input
orientation: 'vertical'
TextInput:
id: text_input
Button:
text: 'dismiss'
on_press: root.dismiss()
''')
class CustomPopup(Popup):
pass
class TestApp(App):
popup_text = StringProperty()
def build(self):
l = BoxLayout()
l.add_widget(Button(
text='show_popup', on_press=self.show_popup
))
l.add_widget(Button(
text='print popup text', on_press=self.print_popup_text
))
return l
def show_popup(self, *args):
p = CustomPopup()
p.content.text_input.bind(text=self.setter('popup_text'))
p.open()
def print_popup_text(self, *args):
print(self.popup_text)
if __name__ == '__main__':
TestApp().run()