Ruby中的语句块

Ruby中的语句块,ruby,syntax,Ruby,Syntax,我有一些语言的背景,这些语言使用{}来表示这些是“语句块”,但我正在学习ruby,真的很困惑它是如何在那里实现的 让我们用C语言说我有 if ( condition ) { statement1; statement2; } else if (condition) { statement1; statement2; // nested if if (condition) { dosomethinghere; }

我有一些语言的背景,这些语言使用{}来表示这些是“语句块”,但我正在学习ruby,真的很困惑它是如何在那里实现的

让我们用C语言说我有

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

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

我如何把这个代码放在ruby中?还要提到如何理解ruby中“{}”的同义词,谢谢。

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

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
其中,
[]
之间的所有内容都是可选的


但是,在另一个方向上,您也可以创建和传递代码块,查看post以了解有关此主题的更多信息。

好的,要回答您的第一个问题:

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
其中,
[]
之间的所有内容都是可选的


但是,在另一个方向上,您也可以创建和传递代码块,查看post以了解有关此主题的更多信息。

if的ruby语法是:

如果条件 身体 其他的 交替体 结束

如果是状况,则为阀体,否则为替代阀体端部

while循环也一样,除了使用
do
而不是
then


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

if的ruby语法是:

如果条件 身体 其他的 交替体 结束

如果是状况,则为阀体,否则为替代阀体端部

while循环也一样,除了使用
do
而不是
then


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

在ruby中,在
if
后面暗含大括号。要关闭块,请使用
结束
而不是闭合大括号。唯一的另一个区别是,在Ruby中使用
elsif(condition)
而不是
elsif(condition)

,在
if
后面隐含了大括号。要关闭块,请使用
结束
而不是闭合大括号。唯一的另一个区别是,如果您想“如何在Ruby中创建新的变量范围”,则使用
elsif(condition)
而不是
elsif(condition)

”?即:

我真的不知道你会怎么做。

如果你在想“如何在Ruby中创建一个新的变量范围”?即:


我真的不知道你会怎么做。

我建议你买一本像样的书,坐下来读前几章。这应该涵盖你在这里提出的所有问题以及更多问题。我建议,如果你想快速完成某件事,这是一个很好的简短介绍,可以让你开始。

我建议你买一本像样的书,坐下来读前几章,这应该涵盖你在这里要求的所有内容,还有更多内容。我建议,如果你想快速完成某件事,这是一个很好的简短介绍,可以帮助你开始。

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

def scope
    yield
end

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

x #=> undefined local variable

编辑:有关Ruby 1.9中“作用域”的更好方法,请参见:

如果您想要一个作用域,您可以定义自己的
作用域
方法:

def scope
    yield
end

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

x #=> undefined local variable

编辑:有关Ruby 1.9中“作用域”的更好方法,请参见:

尝试运行以下命令:

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)

尝试运行以下命令:

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)

我看过类似“开始-结束”的东西,那是什么?我可以说它与{}相同吗?begin-end引入了一个新的变量作用域,所以从这个意义上讲,它就像C中的
{}
,是的。它更常用于救援,这使得它像尝试catch in C++。开始结束不引入新的范围,除非改变,而我没有寻找红宝石开始。x=2;结束;px'ruby 1.8.6(2007-06-07补丁级别36)[i486 linux]2@Logan:嗯。我可以发誓是的。我看过像“开始-结束”这样的东西,那是什么?我可以说它与{}相同吗?begin-end引入了一个新的变量作用域,所以从这个意义上讲,它就像C中的
{}
,是的。它更常用于救援,这使得它像尝试catch in C++。开始结束不引入新的范围,除非改变,而我没有寻找红宝石开始。x=2;结束;px'ruby 1.8.6(2007-06-07补丁级别36)[i486 linux]2@Logan:嗯。我可以发誓是的。我明白,但是如果“if”有一个“end”来表示它已经完成了,那么为什么“elsif”或“else”没有一个“end”来表示这些是它的语句块呢?ruby groups
if..elsif..else..end
“end”是一个块,所以你只需要一个
end
来关闭它们。我明白,但是如果“if”有一个“end”来表示它已经完成了,那么为什么“elsif”或“else”没有一个“end”来表示这是它的语句块呢?ruby将if..elsif..else..end分为一个块,所以你只需要一个
end
来关闭它们。编辑了文章,检查语法规则,并回答你的问题,是的,你在这个假设中是正确的。谢谢,伙计,我想经过一点练习,我会有更好的想法,但这真的很有帮助。编辑了文章,检查语法规则,回答你的问题,是的,你在这个假设中是正确的。谢谢,伙计,我想经过一点练习,我会有更好的想法,但这确实很有帮助。注意,这不允许在封闭范围内对变量进行阴影处理,
x=2;作用域{x=5;放置x};放置x
,如果有人出现并在封闭范围中添加了一个与您正在使用范围块的变量同名的变量,这可能会让人感到惊讶。@logan,您是对的。下面是一个在封闭范围内对变量进行阴影处理的解决方案(在1.9中):注意,这不允许在封闭范围内对变量进行阴影处理,
x=2;作用域{x=5;放置x};放置x
,如果有人出现并在封闭范围中添加了一个与您正在使用范围块的变量同名的变量,这可能会让人感到惊讶。@logan,您是对的。H