如何使用include?方法


vowels = "aeiou"
"hello".include?(vowels) # ==> false

但如果我在语句中添加!,它就可以正常工作:

!("hello".include?(vowels) # ==> true

.include?将所提供的字符串作为一个完整的单词进行评估,因此您的方法所说的是,"do";你好";包括整个子词";aieou";作为它的一部分;你好";不包括";aeiou";。

试试这个,你就会明白:

vowels = "llo"
"hello".include?(vowels) # ==> true

其次,你误读了爆炸("!"(的作用。它并没有让你的方法起作用,它所做的只是反转结果,所以当添加bang时,任何true语句都会变为false,当添加banng时,任何false语句都会变成true。

试试这些:

> true
> !true
> false
> !false

你可以用这个代码向自己证明:

vowels = "llo"
!"hello".include?(vowels) # ==> false

处理Ruby逻辑小问题的一个好地方是使用IRB,或者在带有rails console的Rails项目中,它扩展了IRB。打开计算机上的terminal/commandprompt,键入irb以显示Ruby提示符(你知道这一点,我只是分享一下,以防有帮助(。

您需要循环浏览每个元音,并单独检查每个元音,看看它是否包含在内,如果包含在内,请将结果更新为true。

结论是,当有一系列事情要处理时,您通常希望使用each来循环处理它们,一次评估一个。

vowels = "aeiou"
result = false
vowels.each_char do |char| 
result = true if "hello".include?(char) 
end
puts result

有一些较短的方法可以做到这一点,但这是干净、简单和易于理解的,这恰好也是衡量好代码的一个好方法。

Evolve已经在他的回答中解释了为什么您的include?版本不起作用。

在Ruby中,检查字符串是否至少包含一个vocal的方法可能如下所示:

"hello".match?(/[aeiou]/i)
#=> true
"hxllx".match?(/[aeiou]/i)
#=> false

match?采用正则表达式,并在字符串与模式匹配时返回true/[aeiou]/i是一个正则表达式,当列表aeiou中的任何([...](个字符在字符串中至少找到一次时。末尾的i使整个表达式不区分大小写。

我用它来解释!(not(是如何工作的:

true    # => true
false   # => false
!true   # => false
!false  # => true
!!true  # => true
!!false # => false

请记住,在Ruby中,nilfalse都是false,其他都是true。其他语言可能也会将0视为错误,这可能会让刚学习Ruby的人感到困惑:

foo = nil   # => nil
bar = 0     # => 0
baz = 1     # => 1
!foo = nil  # => true
!bar = 0    # => false
!baz = 1    # => false
!!foo = nil # => false
!!bar = 0   # => true
!!baz = 1   # => true

not!:的长形式

!true     # => false
not true  # => false
!false    # => true
not false # => true

您经常会看到!!用于将一个值转换为其真/假等价值。

正如@Evolve已经说过的,x.include?(y)测试y是否是x的子串。你想知道,x('hello'(是否至少包括y('元音'(中的一个字符。这可以通过x.split(//).any? {|c| y.include?(c)}来完成。split(//)将字符串转换为字符数组,any?测试至少一个数组元素是否满足代码块中指定的属性。

相关内容

最新更新