数组 – 在array.each中的Ruby if else
| 
 这里是 
 Ruby的新手.我试图在数组中放一个if else语句,如果某个模数== 0,发送一个字符串,对于我的生活,我无法在任何地方找到它.我相信有人会发现它非常简单. 
  
  
  a = *(1..100)
a.each { |i| puts "three" if i % 3 == 0 elsif puts "five" if i % 5 == 0 else puts i}只是不确定正确的语法.仍然是ruby的新手,我正在尝试学习语法.上学期上了C课,我的大脑一直想要用C语法. 当我离开时 a = *(1..100)
a.each { |i| puts "three" if i % 3 == 0}它工作正常,只是想弄清楚如何添加if else.感谢帮助. 以下答案非常有用.我试图进一步将其称为函数.它一直返回5,而不是“五”,或3,而不是“三”. 这是我的功能: def array_mod
a = *(1..100)
a.each { |i| if i % 3 == 0  && i % 5 == 0; i = "fifteen" elsif i % 3 == 0; i = "three" elsif i % 5 == 0; i = "five" else i = i end }结束 这是我试图称呼它. require "minitest/autorun"
require_relative "array_modulus.rb"
class TestArrayFunction < Minitest::Test
def test_array1
    results = array_mod
    assert_equal(100,results.length)
end
def test_array2
    results = array_mod
    assert_equal("three",results[2])
end
end我被告知它没有更新我的阵列.再次感谢. 解决方法
 Ruby中条件表达式的语法是: 
  
  
  if c_1 then e_1 elsif c_2 then e_2 elsif c_3 then e_3 … elsif c_n then e_n else e_nplus1 end 其中c_1 … c_n和e_1 … e_nplus1可以是任意Ruby表达式. 可以使用表达式分隔符(即;或换行符)而不是then关键字来分隔条件表达式的各个部分. 用分号(这种用法是非惯用的): if c_1; e_1 elsif c_2; e_2 elsif c_3; e_3 … elsif c_n; e_n else e_nplus1 end 换行: if c_1 e_1 elsif c_2 e_2 elsif c_3 e_3 # … elsif c_n e_n else e_nplus1 end 如果您使用换行符,您也可以选择使用then关键字,但这也是非惯用的: if c_1 then e_1 elsif c_2 then e_2 elsif c_3 then e_3 # … elsif c_n then e_n else e_nplus1 end 因此,在您的情况下,正确的语法将是: # idiomatic
a.each { |i| if i % 3 == 0 then puts "three" elsif i % 5 == 0 then puts "five" else puts i end }
# non-idiomatic
a.each { |i| if i % 3 == 0; puts "three" elsif i % 5 == 0; puts "five" else puts i end }
# idiomatic
a.each { |i|
  if i % 3 == 0
    puts "three"
  elsif i % 5 == 0
    puts "five"
  else
    puts i
  end
}
# non-idiomatic
a.each { |i|
  if i % 3 == 0
  then puts "three"
  elsif i % 5 == 0
  then puts "five"
  else
    puts i
  end
}但是,对于if / elsif这样的链,使用case表达式通常更惯用: # idiomatic case when c_1 then e_1 when c_2 then e_2 when c_3 then e_3 … when c_n then e_n else e_nplus1 end # non-idiomatic case when c_1; e_1 when c_2; e_2 when c_3; e_3 … when c_n; e_n else e_nplus1 end # idiomatic case when c_1 e_1 when c_2 e_2 when c_3 e_3 # … when c_n e_n else e_nplus1 end # non-idiomatic case when c_1 then e_1 when c_2 then e_2 when c_3 then e_3 # … when c_n then e_n else e_nplus1 end 在您的情况下,这将是这样的: # idiomatic
a.each { |i| case when i % 3 == 0 then puts "three" when i % 5 == 0 then puts "five" else puts i end }
# non-idiomatic
a.each { |i| case when i % 3 == 0; puts "three" when i % 5 == 0; puts "five" else puts i end }
# idiomatic
a.each { |i|
  case
  when i % 3 == 0
    puts "three"
  when i % 5 == 0
    puts "five"
  else
    puts i
  end
}
# non-idiomatic
a.each { |i|
  case
  when i % 3 == 0
  then puts "three"
  when i % 5 == 0
  then puts "five"
  else
    puts i
  end
}请注意,条件表达式(if和case)都是表达式,而不是语句. Ruby中没有语句,一切都是表达式,一切都评估为一个值.条件表达式求值为已采用的分支中的表达式的值. 所以,你也可以像这样写: # idiomatic
a.each { |i| puts(if i % 3 == 0 then "three" elsif i % 5 == 0 then "five" else i end) }
# non-idiomatic
a.each { |i| puts(if i % 3 == 0; "three" elsif i % 5 == 0; "five" else i end) }
# idiomatic
a.each { |i|
  puts(if i % 3 == 0
    "three"
  elsif i % 5 == 0
    "five"
  else
    i
  end)
}
# non-idiomatic
a.each { |i|
  puts(if i % 3 == 0
  then "three"
  elsif i % 5 == 0
  then "five"
  else
    i
  end)
}
# idiomatic
a.each { |i| puts(case when i % 3 == 0 then "three" when i % 5 == 0 then "five" else i end) }
# non-idiomatic
a.each { |i| puts(case when i % 3 == 0; "three" when i % 5 == 0; "five" else i end) }
# idiomatic
a.each { |i|
  puts(case
  when i % 3 == 0
    "three"
  when i % 5 == 0
    "five"
  else
    i
  end)
}
# non-idiomatic
a.each { |i|
  puts(case
  when i % 3 == 0
  then "three"
  when i % 5 == 0
  then "five"
  else
    i
  end)
}(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
