Câu trả lời:
Xóa if
khỏiif @item.rigged ? "Yes" : "No"
Toán tử ternary có hình thức condition ? if_true : if_false
s/that/not that
:)
Trong Ruby, điều kiện và then
phần của if
biểu thức phải được phân tách bằng dấu phân cách biểu thức (nghĩa là ;
hoặc dòng mới) hoặcthen
từ khóa.
Vì vậy, tất cả những thứ này sẽ hoạt động:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
Ngoài ra còn có một toán tử có điều kiện trong Ruby, nhưng điều đó là hoàn toàn không cần thiết. Toán tử có điều kiện là cần thiết trong C, bởi vì nó là toán tử: trong C, if
là một câu lệnh và do đó không thể trả về một giá trị, vì vậy nếu bạn muốn trả về một giá trị, bạn cần sử dụng một cái gì đó có thể trả về một giá trị. Và điều duy nhất trong C có thể trả về một giá trị là các hàm và toán tử, và vì không thể tạo if
hàm trong C, nên bạn cần một toán tử.
Trong Ruby, tuy nhiên, if
là một biểu thức. Trong thực tế, mọi thứ đều là một biểu thức trong Ruby, vì vậy nó đã có thể trả về một giá trị. Không cần toán tử điều kiện để tồn tại , hãy để một mình sử dụng nó.
BTW: thông thường đặt tên cho các phương thức được sử dụng để đặt câu hỏi với dấu chấm hỏi ở cuối, như thế này:
@item.rigged?
Điều này cho thấy một vấn đề khác khi sử dụng toán tử có điều kiện trong Ruby:
@item.rigged? ? 'Yes' : 'No'
Thật khó để đọc với nhiều dấu hỏi gần nhau.
Một dòng nếu:
<statement> if <condition>
Trường hợp của bạn:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.rigged
để ngăn chặn!
nil
thay vì 'Yes'
nếu item.rigged
đúng. Một dòng nếu hoặc trừ khi các câu lệnh trở lại nil
nếu điều kiện không được đáp ứng.
Từ những gì tôi biết
3 lớp lót
a = 10 if <condition>
thí dụ:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>
thí dụ:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>
thí dụ:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
Tôi hy vọng nó sẽ giúp.
Cả hai cấu trúc một dòng shell và C đều hoạt động (ruby 1.9.3p429):
# Shell format
irb(main):022:0> true && "Yes" || "No"
=> "Yes"
irb(main):023:0> false && "Yes" || "No"
=> "No"
# C format
irb(main):024:0> true ? "Yes" : "No"
=> "Yes"
irb(main):025:0> false ? "Yes" : "No"
=> "No"
nếu điều kiện khác có thể được bao phủ với toán tử ternary
@item.rigged? ? 'Yes' : 'No'
Bạn có thể dùng ----
(@ mục. tưới tiêu)? "Có không"
Nếu @ item.rigged là đúng, nó sẽ trả về 'Có', nó sẽ trả về 'Không'