Ruby中的语句块

时间:2010-01-03 18:19:16

标签: ruby syntax

我有一个语言的背景,使用{}说这些是“语句块”,但我正在学习ruby并且真的很困惑它是如何在那里完成的。

让我们说在C我有

if ( condition )
{
  statement1;
  statement2;
}
else if (condition)
{
  statement1;
  statement2;

// nested if
       if (condition)
       {
          dosomethinghere;
       }
    }
    else
    {
      statement1;
      statement2;
    }

我如何将此代码放入ruby中?并且还提到如何理解ruby中“{}”的同义词,谢谢。

7 个答案:

答案 0 :(得分:8)

好的,回答你的第一个问题:

if ( condition )
  statement1
  statement2
elsif (condition)
  statement1
  statement2
   // nested if
   if (condition)
     dosomethinghere
   end
else
  statement1
  statement2
end

if语句的语法规则是:

 if expr [then]
   expr...
[elsif expr [then]
    expr...]...
[else
   expr...]
 end

[]之间的所有内容都是可选的

但是,在其他方面,您还可以创建并传递代码块,查看this帖子以阅读有关此主题的更多信息。

答案 1 :(得分:3)

if的ruby语法是:

如果有条件   身体 其他   交替的身体 端

或者

如果条件然后身体其他替代身体结束

while循环除外,do代替then

{}用于传递匿名函数(在ruby中混淆地称为“块”)作为方法的参数。

答案 2 :(得分:1)

我建议你找一本体面的书并坐下来阅读前几章,这应该包括你在这里提出的所有内容以及更多内容。我建议http://oreilly.com/catalog/9780596529864虽然如果你想要快速完成任务,http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm是一个很好的简短介绍,可以帮助你入门。

答案 3 :(得分:0)

在Ruby中,if之后隐含了左括号。要关闭块,请使用end而不是闭括号。唯一的区别是您使用elsif (condition)而不是else if (condition)

答案 4 :(得分:0)

如果您正在考虑“如何在Ruby中创建新的变量范围”?即:

{
    var myvar = 1;
}
myvar = 2; // compile error because myvar isn't in this scope!

我不确定你会怎么做。

答案 5 :(得分:0)

尝试运行以下内容:

def example(x,y)

puts "X:#{x},Y:#{y}"

if ( x == 0 ) then
  puts "Its true"
elsif (x == 1)
  puts "Its not true"
  puts "it certainly isn't"
    if (y == 0) then
      puts "i'm the nested if"
    end
else
  puts "i made it to the default case"
  puts "freedom"
end
  puts 
end


example(0,0)
example(1,0)
example(1,1)
example(2,2)

答案 6 :(得分:-1)

如果您想要一个范围,您可以定义自己的scope方法:

def scope
    yield
end

# use like this
scope {
    x = 5
    puts x #=> 5
}

x #=> undefined local variable

编辑:为了更好地处理Ruby 1.9中的“范围”,请参阅:http://banisterfiend.wordpress.com/2010/01/07/controlling-object-scope-in-ruby-1-9/