Как уже предлагалось в предыдущих ответах, делать то, что вы хотите, недопустимо.
!foo = true
оценивается как
!(foo = true)
То есть присваивать true
foo
и получите отрицание результата этого назначения, которое сводится к
!true
или
false
Если вы хотите сохранить !true
, оно должно быть
foo = !true
Если вы хотите присвоить true для foo и отрицание для другой переменной, это будет
foo2 = !(foo = true)
, и это все равно вызовет предупреждение, потому что в конце концов этоназначение в условном выражении.
Я на самом деле хочу присвоить true для foo, а затем получить противоположность foo в стеке
Не имеет особого смысла,Вы «получаете что-то в стеке», присваивая это переменной, как foo2
в моем примере.
Если цель здесь - присвоить переменной экземпляра и вернуть отрицание из метода, то да, вам сначала нужно будет присвоить переменную, а затем явно вернуть отрицание.Это не ошибка в Ruby, а на самом деле особенность, и ради чистого кода не следует делать это в одну строку, потому что она в основном неотличима от обычной ошибки использования =
, когда подразумевалось ==
.