Tôi đã xem qua đoạn mã này ruby:ruby câu hỏi đôi dấu
str[-1]==??
dấu hỏi đôi là gì tất cả về? Chưa bao giờ thấy điều đó trước đây.
Tôi đã xem qua đoạn mã này ruby:ruby câu hỏi đôi dấu
str[-1]==??
dấu hỏi đôi là gì tất cả về? Chưa bao giờ thấy điều đó trước đây.
Ruby 1.8 có cú pháp? -prefix biến một ký tự thành giá trị mã ASCII của nó. Ví dụ: ?a
là giá trị ASCII cho chữ cái a
(hoặc 97). Dấu hỏi kép bạn thấy thực sự chỉ là số 63
(hoặc giá trị ASCII cho ?
).
?a # => 97
?b # => 98
?c # => 99
?\n # => 10
?? # => 63
Để chuyển đổi trở lại, bạn có thể sử dụng chr
phương pháp:
97.chr # => "a"
10.chr # => "\n"
63.chr # => "?"
??.chr # => "?"
Trong của Ruby 1,9, cú pháp ?a
trả về nhân vật chính (cũng như cú pháp khung vuông trên dây):
?? # => "?"
"What?"[-1] # => "?"
Như Ryan cho biết, tiền tố ?
cung cấp cho bạn giá trị ASCII của ký tự. Lý do tại sao điều này hữu ích trong ngữ cảnh này là khi bạn sử dụng ký pháp chỉ mục trên một chuỗi trong Ruby 1.8, giá trị ASCII được trả về thay vì ký tự. ví dụ.
irb(main):009:0> str = 'hello'
=> "hello"
irb(main):010:0> str[-1]
=> 111
nên sau đây sẽ không kiểm tra nếu ký tự cuối cùng của một chuỗi là chữ 'o'
irb(main):011:0> str[-1] == 'o'
=> false
nhưng điều này sẽ:
irb(main):012:0> str[-1] == ?o
=> true
và (với điều kiện bạn biết cái gì? không!) cái này hơi rõ ràng hơn
irb(main):013:0> str[-1] == 111
=> true
Ở trên áp dụng cho Ruby 1.8, chứ không phải 1.9 trong đó '" hello "[- 1] ==" o "' –
Đây chính xác là lý do tại sao, trong ruby19, đó là '? O ==" o "', để ' "hello" [- 1] ==? o' trong cả ruby18 và ruby19. – rampion
Cảm ơn glenn, tôi đã cập nhật câu trả lời để làm rõ bit chỉ áp dụng trong 1.8 – mikej
Sẽ chính xác khi nói rằng cú pháp '?' Không được dùng trong phiên bản 1.9, vì nó hiện đang phục vụ cho mục đích nhỏ? –
Myrddin, Đó có lẽ là một điều công bằng để nói. Tôi không thấy nhiều điểm trong việc sử dụng '? 'Cú pháp trong 1.9. –