Câu trả lời:
Xóa ifkhỏ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à thenphần của ifbiể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, iflà 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 ifhàm trong C, nên bạn cần một toán tử.
Trong Ruby, tuy nhiên, iflà 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!
nilthay 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 nilnế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'