Làm cách nào để tham khảo ByRef và ByVal trong nhãn thả xuống? [đóng cửa]


9

Các MSDN trang trên ByRefByValtừ khóa không phải là rất hữu ích; trừ khi tôi bằng cách nào đó bỏ qua nó, họ chỉ đơn giản được gọi là "từ khóa" ở mọi nơi.

Một trong những người đóng góp chính của dự án Rubberduck đang thực hiện tái cấu trúc Trường đóng gói rất tuyệt vời và giao diện người dùng xuất hiện khá độc đáo .. ngoại trừ tôi gặp vấn đề với nhãn phía trên thả xuống cho ByRef/ ByVal, có ghi "Khả năng truy cập":

Hộp thoại tái cấu trúc "Encapsulation Field" của Rubberduck

Tôi không thích "Khả năng truy cập" bởi vì tôi đang sử dụng nó ở nơi khác cho Public/ Private/ công cụ Friendsửa đổi truy cập nơi cảm thấy chính xác hơn.

Tôi không muốn sử dụng "Công cụ sửa đổi" vì IMO chỉ là viết tắt của "công cụ sửa đổi truy cập".

Tôi muốn nhãn đó là chính xác, nhưng vốn từ vựng của tôi rõ ràng là thiếu và tôi không biết nên gọi những từ khóa này là gì.

Nhãn này nên nói gì, để chính xác? Tôi đang tìm từ gì vậy? "Họ từ khóa" làm ByRef/ ByValthuộc về cái gì?


2
Như một trong những ý kiến ​​nói, nó hoàn toàn không nên ở đó - ByRef cho một tài sản là một chút điên rồ. Nếu thậm chí có thể, điều đó thật xấu - cho phép bạn thay đổi các biến của người gọi mà họ không biết.
jmoreno

Rất nhiều tài liệu trong "Vũ trụ VB", (vì vậy, không cụ thể là VBA) dường như gọi đây là "Cơ chế vượt qua".
Damien_The_Unbeliever

@jmoreno Mình hoàn toàn đồng ý. Tôi sẽ làm cho nó ByValmà không có khả năng thay đổi nó thành ByRefngoài việc chỉnh sửa mã được tạo thủ công và "giải quyết vấn đề"! VBA có thể biên dịch một số lượng lớn những điều vô nghĩa mà bạn biết :-) vẫn vậy, tôi thích rằng cuối cùng cũng có một nơi trực tuyến đặt tên cho các từ khóa này.
Mathieu Guindon

Câu trả lời:


14

Trong trường hợp này, tôi sẽ sử dụng "Pass As" (hoặc "Pass").

Bạn có một luồng hoàn toàn phù hợp với cách sử dụng này.

  • Tên biến : foo
  • Vượt qua như: ByVal / Pass: ByRef

Điều này phù hợp với quy trình làm việc của bạn một cách hoàn hảo và tình cờ chính xác là những gì bài viết bạn tham khảo chỉ ra.

Khi bạn đọc qua các tùy chọn của mình, nó sẽ đọc hoàn hảo khi sử dụng 'Pass As' vì bạn có thể chỉ cần đọc qua tiêu đề và chọn văn bản một cách thích hợp - "'Tên biến' foo, 'Pass As'."

Nếu bạn muốn làm cho nó một chút đọc tốt hơn bạn có thể làm tùy chọn danh sách của bạn "Giá trị" và "tham khảo" tùy thuộc vào nếu đối tượng mục tiêu của bạn là lập trình viên VBA hoặc lập trình viên phi VBA những người có thể hơi ít quen thuộc với ByVal và ByRef từ khóa.

Hoặc cách khác, thay đổi nó thành "Đạt:" và đặt thành "Theo tham chiếu (ByRef)" và "Theo giá trị (ByVal)" trong danh sách thả xuống. Có vẻ như danh sách thả xuống của bạn có không gian để hiển thị tất cả văn bản này. Hoặc chỉ các từ khóa ByRef / ByVal.


Tôi sẽ sử dụng "Pass as ByVal" hoặc "Pass by value". "Pass by ByVal" nghe có vẻ kỳ lạ.
user253751

@immibis gọi tốt!
enderland

3
Ngoài ra, bạn có thể xem xét các nút radio thay vì thả xuống, vì có quá ít sự lựa chọn.
Kyralessa

@Kyralessa cũng chính xác như những gì tôi đã nói với Mat khi trò chuyện. Và tôi nghĩ là những gì họ đã đi với thiết kế cuối cùng :-)
enderland

5

Tôi sẽ sử dụng một trong 3 thuật ngữ này để gắn nhãn thả xuống chọn:

  1. Ngữ nghĩa
  2. Đi qua
  3. Công cụ sửa đổi tham số

Tôi thích "Ngữ nghĩa"
Mathieu Guindon

Tôi thích "Công cụ sửa đổi tham số".

3

"Pass By Semantics" có lẽ là gần nhất với những gì bạn đang tìm kiếm.


argh ăn cắp mũ giao hàng nhanh chóng của tôi! Eeeeevil!
Jimmy Hoffa

2
Tôi đã có một cái, rất vui được tặng bạn cái này ...
Oded

3

Thuật ngữ chính xác và chính thức nhất cho điều này sẽ là "Bí danh ngữ nghĩa".

Khi ByRefđược sử dụng, tên bên trong hàm là bí danh cho biến của người gọi - tất cả các thay đổi đối với một trong hai đều được hiển thị ngay lập tức đối với người kia. Với ByVal, tên bên trong hàm là một bản sao riêng biệt của biến người gọi (tất nhiên, cả bản sao của hàm gọi và hàm có thể tham chiếu đến cùng một đối tượng, nhưng chúng khác biệt ở chỗ việc gán lại tham số bên trong hàm không gán lại biến của người gọi ).

Các tùy chọn sẽ là

  • Bí danh ( ByRef)
  • Sao chép ( ByVal)

Một số nền tảng thêm khả năng thứ ba, trong đó việc đặt bí danh cho biến người gọi được thực hiện nhưng không được phép có nhiều hơn một tham số cho các đối tượng chồng chéo bí danh. (Ý tưởng đằng sau restricttừ khóa C , người ta cũng tìm thấy điều này trong IDL, trong đó từ khóa thuộc tính unique). .NET không có cách nào tốt để mã hóa kiến ​​thức này.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.