2013-03-10 24 views
5

Trong cuốn sách Smalltalk Best Practice Patterns từ Kent Beck, dấu đôi lớn hơn (>>) được dùng để xác định phương pháp như thế này:phương pháp Xác định với hơn gấp đôi so với dấu (>>) trong Smalltalk

Point class>>x: xNumber y: yNumber 
    ^self new 
     setX: xNumber 
     y: yNumber 

Point>>setX: xNumber y: yNumber 
    x := xNumber. 
    y := yNumber. 
    ^self 

Tuy nhiên, tôi không thể làm cho nó chạy trong GNU Smalltalk.

Cú pháp hợp lệ trong việc triển khai Smalltalk có hợp lệ không? Hay nó chỉ là loại mã giả?

Trả lời

5

Thực tế, đây là mã Pseudo.

Trong các ngôn ngữ khác mà bạn sẽ sử dụng . nói với mọi người rằng phương pháp này là trong lớp này nhưng trong Smalltalk bạn viết >>

Bạn sẽ làm gì trong một Smalltalk như Squeak hoặc Pharo cho

Point class>>x: xNumber y: yNumber 
    ^self new 
     setX: xNumber 
     y: yNumber 
  1. Mở Trình duyệt hệ thống
  2. klick trên lớp, một nút sẽ hiển thị cho bạn lớp học của lớp học.
  3. dán phương pháp trong vùng văn bản với mã nguồn:

    x: xNumber y: yNumber 
        ^self new 
         setX: xNumber 
         y: yNumber 
    
  4. Strg-s để lưu mã

Đối

Point>>setX: xNumber y: yNumber 
    x := xNumber. 
    y := yNumber. 
    ^self 

Bạn sẽ làm giống nhau nhưng không sử dụng lớp học

4

Ngoài ra, hãy lưu ý rằng thực sự, # >> là một thông điệp mà bạn có thể gửi đến một lớp và về cơ bản nó truy cập từ điển phương thức cho biểu tượng (đối số bộ chọn). Thấy chưa, lớp hành vi, phương pháp >>

>> selector 
"Answer the compiled method associated with the argument, selector (a 
Symbol), a message selector in the receiver's method dictionary. If the 
selector is not in the dictionary, create an error notification." 

^self compiledMethodAt: selector 

Vì vậy, bạn có thể làm, ví dụ (kiểm tra mà)

Point class >> #x:y: 

Thông báo tuy nhiên, ở đây chúng tôi gửi #class vì #x: y: là một phương thức bên lớp. Nếu bạn muốn truy cập vào một phương pháp bên Ví dụ, nói #normalized sau đó bạn có thể làm:

Point >> #normalized 
2

Cú pháp đúng cho GNU Smalltalk sẽ giống như thế này:

Point class extend [ 
    x: xNumber y: yNumber [ 
     ^self new 
      setX: xNumber 
      y: yNumber ] 
] 

Point extend [ 
    setX: xNumber y: yNumber [ 
     x := xNumber. 
     y := yNumber. 
     ^self ] 
] 

Để biết thêm thông tin về GNU Smalltalk cú pháp xem here.

Các vấn đề liên quan