意外的关键字结束错误?

时间:2014-03-12 15:19:51

标签: ruby

我正在尝试用input(n,m)打印国际象棋棋盘。 n代表列,m代表行。例如,"4,3"应输出:

0101
1010
0101

我的代码提供了“意外的keyword_end,期待$ end”错误:

def zero_col(n)
  n.times{|x| print n%2}
end
def fir_col(n)
  n.times{|x| x%2==0 ? print 1 : print 0}
end
def chess(input)
  n,m=input[0].to_i, input[2].to_i
  m.times{|x| x%2==0 ? zero_col(n) : fir_col(n)}
end
chess("3,2")

它还包含另一个错误:

syntax error, unexpected tINTEGER, expecting keyword_do or '{' or '('
  n.times{|x| x%2==0 ? print 1 : print 0}
                            ^

我使用?:错了吗?

3 个答案:

答案 0 :(得分:1)

在Ruby中,方法使用def关键字声明,因此从functions更改为def

答案 1 :(得分:0)

更改

 n.times { |x| x%2==0 ? print 1 : print 0 }
 # actually parsed as
 # n.times { |x| x%2==0 ? print(1 : print 0}), which is invalid syntactically.

 n.times { |x| x%2==0 ? print(1) : print(0) }

答案 2 :(得分:0)

不要使用三元(?:)进行流量控制。

一般情况下,它在Ruby中被避免,当它被使用时,使用它来进行简单的测试,返回不同的结果,类似于单行if / else

4.times{ |x| 
  print x%2==0 ? 1 : 0
}

另外,请大量使用空格,因为它有助于提高可读性。例如,"是可读的","或者是这个"?

并且,使用括号来帮助从三元组中的结果中定义逻辑。它在语法上并不是绝对必要的,但它有助于提高可读性。

4.times{ |x| 
  print (x % 2 == 0) ? 1 : 0
}