ruby if-else one-liner with" puts"不工作

时间:2015-09-16 20:08:53

标签: ruby if-statement

我正在尝试

    response = gets.chomp
    response == "a" ? puts "yes" : puts "no"

终端抱怨:

syntax error, unexpected ':', expecting keyword_end
    response == "a" ? puts "yes" : puts "no"
                                  ^

我做错了什么?

1 个答案:

答案 0 :(得分:6)

这是您的错误:

Sub selectRange()
    Dim selectedRange As Range
    Dim errorMessage As String
    errorMessage = vbNullString
    Dim ran As Range, calB(1 To 30) As Long, i As Integer, j As Integer, k As Integer, l As Integer

    Do
        'doesn't handle cancel event
        Set selectedRange = Application.InputBox("Select the Cal B table.", _
        Type:=8, Title:="Please select 14 rows and 3 columns" & errorMessage)
        errorMessage = "; previous selection was invalid"
    Loop While selectedRange.Columns.Count <> 3 Or selectedRange.Rows.Count <> 14

    For j = 1 To 14
        For i = 1 To 3
            If Abs(selectedRange.Cells(j, i)) > 0 Then
                calB(l) = selectedRange.Cells(j, i)
                l = l + 1
            End If
        Next
    Next
...rest of your code

Ruby正在寻找第一个response == "a" ? puts "yes" : puts "no" #=> syntax error, unexpected ':', expecting end-of-input # response == "a" ? puts "yes" : puts "no" # ^ &#39;参数。由于它们未括在括号中,因此她假定它们位于puts之后的逗号分隔列表中。第一个是puts,但"yes"后面没有逗号,因此会引发异常。

试试吧:

"yes"

response == "a" ? (puts "yes") : puts "no" #=> syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' # response == "a" ? (puts "yes") : puts "no" # ^ 引发同样的异常。)

我不知道为什么这不起作用。例外情况表明它在第二个response == "a" ? puts("yes") : puts "no"之后需要一个块(do...end{..})或一个左括号(用于封闭参数)。 Kernel#puts来电puts。当$stdout.puts返回$stdout个对象时,会调用IO#puts,但该文档没有说明问题。也许读者可以提供解释。

您可以按如下方式编写:

IO

response == "a" ? (puts "yes") : (puts "no")

或(最好的,imo)

response == "a" ? puts("yes") : puts("no")