Ruby多线程块没有结束
发布时间:2020-12-16 20:17:52 所属栏目:百科 来源:网络整理
导读:我是 Ruby的初学者,所以我很抱歉问一些这么简单,但是这个代码有什么问题吗? 3.upto(9) { print "Hello" puts " World"} 要么 3.upto(9) { |n| print "Hello " puts n} 它工作得很好,但我看到的大多数代码示例使用的语法 3.upto(9) do |n| print "Hello " pu
我是
Ruby的初学者,所以我很抱歉问一些这么简单,但是这个代码有什么问题吗?
3.upto(9) { print "Hello" puts " World" } 要么 3.upto(9) { |n| print "Hello " puts n } 它工作得很好,但我看到的大多数代码示例使用的语法 3.upto(9) do |n| print "Hello " puts n end 仅仅使用花括号用于单个语句的惯例呢?来自C/C++#第一个似乎对我来说比较自然,但在罗马时! 解决方法
两种语法之间存在微妙的区别. {}的优先级高于…结束.因此,以下将通过bar和block到方法foo:
foo bar do ... end 而以下将通过一个块到bar,其结果是foo: foo bar { ... } 所以你的例子将是一样的.但是,如果你离开括号: > 3.upto 9 { puts "Hi" } SyntaxError: compile error (irb):82: syntax error,unexpected '{',expecting $end 3.upto 9 { ^ from (irb):82 from :0 > 3.upto 9 do puts "Hi" end Hi Hi Hi Hi Hi Hi Hi => 3 所以,{}如果你在Ruby中留下括号,这是比较常见的,那么{}更有可能吸引你.因为这个原因,由于Ruby条件和其他控制结构都使用end作为分隔符,所以人们通常使用do … end来处理语句结尾处的多行代码块. 然而,{}经常用于那些结束是麻烦的地方,例如,如果你连在一起的几个方法.这可以让您编写一个可以用作方法链一部分的简短的一行小块. > [1,2,3].sort{|x,y| y<=>x}.map{|x| x+1} => [4,3,2] 以下是一个例子来说明这一点: def foo arg if block_given? puts "Block given to foo" yield arg else puts "No block given to foo" arg end end def bar if block_given? puts "Block given to bar" yield "Yielded from bar" else puts "No block given to bar" end "Returned from bar" end irb(main):077:0> foo bar { |arg| puts arg } Block given to bar Yielded from bar No block given to foo => "Returned from bar" irb(main):078:0> foo bar do |arg| puts arg end No block given to bar Block given to foo Returned from bar => nil (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |