Можно ли сохранить переменную в условном придаточном предложении?

Грамматическая ошибка,

if answer.include? word_array[iterations] == true

является избыточной, а также не цитируется правильно.

То, что вы пытались, было:

if answer.include?(word_array[iterations]) == true

Но Руби читает это как:

if answer.include? (word_array[iterations] == true)

Но правильный путь:

if answer.include? word_array[iterations]
[1122 ] Не нужно проверять, верно ли это, поскольку include? даст вам true или false и уже может применяться к if.

Например:

"abcd".include? 'a'
#=> true
"abcd".include? 'f'
#=> false
"abcd".include?('a') == true
#=> true

Как вы можете видеть, когда вы сравниваете true == true, он все еще дает вам true, так зачем вам их сравнивать?

О ошибка преобразования nil, я думаю, это потому что это:

while iterations <= word.length

должно измениться на

while iterations < word.length

, поскольку максимальный индекс строки - это длина строки минус один. (От 0 до длины-1).

Кроме того, gets будет вводить дополнительный \n с ним, замените его на gets.chomp.

17
задан bluish 11 December 2013 в 14:02
поделиться

5 ответов

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

Bar bar;
if(foo!=null && (bar = foo.getBar())!=null){
  System.out.println("Success: " + bar);
} else {
  System.out.println("Failiure.");
}
32
ответ дан 30 November 2019 в 10:29
поделиться

если бы Вы хотите ограничить объем панели Панели, я добавил бы {и} вокруг кода, который отправил Michael.

void foo()
{
    // some code ...

    // this block limits the scope of "Bar bar" so that the rest of the method cannot see 
    // it.
    {
        Bar bar;
        if(foo!=null && (bar = foo.getBar())!=null){
            System.out.println("Success: " + bar);
        } else {
            System.out.println("Failiure.");
        }
    }
}

Вы могли бы также хотеть зарегистрироваться в шаблоне несуществующего объекта, если он имеет смысл. Я лично стараюсь избегать вещей, являющихся пустым, если я могу... действительно думать о том, если Вы хотите, чтобы пустой указатель был позволен или нет.

7
ответ дан 30 November 2019 в 10:29
поделиться

Я использовал ту технику при итерации по строкам от BufferedReader:

BufferedReader br = // create reader
String line
while ((line = br.readLine()) != null) {
    // process the line
}

Так да, можно делать уроки, и результатом от этого будет переменная левой стороны, которую можно затем проверить. Однако не законно объявить переменные в тесте, поскольку они затем только были бы ограничены по объему к тому выражению.

12
ответ дан 30 November 2019 в 10:29
поделиться

От отдела "Мой Язык программирования Лучше, Чем Ваш Язык программирования": В Groovy, можно ли использовать"? ". оператор:

Bar bar = foo?.bar
if (bar != null) {
}

В Java, это - хороший шаблон (*):

Bar bar = foo == null ? null : foo.getBar();
if (bar != null) {
}

*: Что-то можно сохранить в кончиках пальцев.

2
ответ дан 30 November 2019 в 10:29
поделиться

Три точки, которым полностью не удается ответить на вопрос:

null является злым. Не пишите методы, которые возвращают его. Ваша проблема в качестве примера затем исчезла бы.

я думаю, что Вы могли бы пропускать инкапсуляцию. Вместо foo.getBar() интерфейс foo мог быть сделан таким, что Вы выполняете, "говорят, не спрашивают" операцию?

Побочные эффекты в выражении имеет тенденцию вызывать плохой код. Предпочтите больше, более простые строки меньше, ошибочные строки. Обычное исключение при использовании ++ для постепенного увеличения индекса при доступе к буферу или подобному итератору разрабатывает алгоритмы.

1
ответ дан 30 November 2019 в 10:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: