2015-08-11 7 views
0

Я работаю над следующим упражнением в курсе, и я не могу обмотать голову вокруг этого. Я очень новичок в обучении Rails, поэтому, пожалуйста, будьте терпеливы со мной. В настоящее время упражнения хочет, чтобы написать метод, названный tasty?, который принимает один аргумент:Булевое упражнение

def tasty?(ripe) 
end 

tasty? должен:

  • возвращение «Да», если ripe является true
  • возвращение «Еще не» если ripe является false

Технические характеристики:

describe "tasty?" do 
    it "should return 'Yes' if ripe is true" do 
    expect(tasty?(true)).to eq("Yes") 
    end 
    it "should return 'Not Yet' if ripe is false" do 
    expect(tasty?(false)).to eq("Not Yet") 
    end 
end 

Я написал:

def tasty?(ripe) 
    if "ripe == 'yes'" 
    (tasty?("true")).==("yes") 
    end 
    if "ripe == 'not yet'" 
    (tasty?("false")).==("not yet") 
    end 
end 

И получить это сообщение, когда я запускаю его:

exercise.rb:4: warning: string literal in condition 
exercise.rb:7: warning: string literal in condition 

Может кто-нибудь сказать мне, что я делаю неправильно? Спасибо за помощь.

+2

@CarySwoveland эти комментарии называются ответами ;-) – Stefan

+0

Читатели: @Stefan ссылался на комментарий, который я впоследствии преобразовал в ответ. Кажется, я опубликовал немало ответов, которые начались как краткие комментарии. –

+0

Спасибо, что сделали мой код более ясным! Думаю, мне лучше вернуться в учебник Stackoverflow о том, как это сделать! :) – Jcode

ответ

3

Как @eirikir показал вам ошибку или ваши пути, я рассмотрю другую проблему.

Попробуйте это:

def tasty?(ripe) 
    if ripe==true 
    puts "Yes" 
    else 
    puts "Not Yet" 
    end 
end 

Тогда

tasty?(true) #=> "Yes" 
tasty?(false) #=> "Not Yet" 
tasty?(nil) #=> "Not Yet" 
tasty?(42) #=> "Not Yet" 

Последние возвращается "Еще не", потому что:

42==true #=> false 

Теперь попробуйте это:

def tasty?(ripe) 
    if ripe 
    puts "Yes" 
    else 
    puts "Not Yet" 
    end 
end 

Тогда:

tasty?(true) #=> "Yes" 
tasty?(false) #=> "Not Yet" 
tasty?(nil) #=> "Not Yet" 
tasty?(42) #=> "Yes" 

tasty?(42) теперь возвращает "Yes"ripe, потому что оценивает true. Это связано с тем, что в логическом выражении (например, if..) объект оценивает true (считается «правдивым»), если он равен любому значению, отличному от false или nil. Он считается «ложным», если он равен false или nil.

@craig показал, как вы можете упростить последующее выражение.

+0

Да @caryswoveland это очень помогло мне! Наконец смог работать. Я заметил свои ошибки сразу после прочтения ответов каждого! – Jcode

3

Ошибка, которую вы получаете, связана с строкой в ​​инструкции if; Вы должны удалить кавычки, например .:

if ripe == 'yes' 

Однако, поскольку ripe по-видимому, всегда булево true или false, а не строка "yes", вы не должны сравнивать его "yes". Вы должны быть в состоянии передать его непосредственно к if высказыванием:

if ripe 
    … 
else 
    … 
end 

Тогда вы можете просто вернуть нужные строки для различных условий:

if ripe 
    "Yes" 
else 
    "Not yet" 
end 

Имеет ли это смысл?

+0

Да @eirikir, это имеет смысл! Огромное спасибо! – Jcode

1

на основе спецификации, я бы написать так:

def tasty?(ripe) 
    ripe ? 'Yes' : 'Not Yet' 
end 

Это также может быть записано более пространно, как:

def tasty?(ripe) 
    if ripe 
    'Yes' 
    else 
    'Not Yet' 
    end 
end 

Параметр для вашего метода, ripe будет - на основе спецификации, которую вы предоставили - true или false. Итак, в вашем методе вам нужно проверить, действительно ли ripe является истинным или ложным, а затем вернуть правильную строку (т. Е. Да или еще нет).

В моем первом примере используется ternary operator, который является сокращенным выражением для оператора if/else (как показано в моем втором блоке кода).

В принципе, он просто спрашивает, является ли зрелым истинным, и если да, то он возвращает «Да». Если нет, он возвращает «Еще не».

+0

Спасибо, тоже @ craig.kaminsky! Я должен сделать некоторое наблюдение за тройным оператором. Наконец работал, и я ценю вашу помощь! – Jcode

Смежные вопросы