Khi nào nên sử dụng phạm vi s: và hủy bỏ đối số để xác định hàm?


7

Khi xác định hàm, có phải luôn luôn khuyến nghị sử dụng phạm vi s:để đặt nó cục bộ vào tập lệnh và tránh ghi đè một hàm có cùng tên trong không gian tên toàn cục không?
Và nó có luôn được khuyến nghị sử dụng đối số aborttrong trường hợp hàm phát hiện lỗi không?

function! s:SomeFunction() abort
    echo "hello world!"
endfunction

Phạm vi s:có vẻ là một điều tốt, nhưng nó làm cho mã dài hơn một chút, bởi vì mỗi lần tôi muốn gọi SomeFunction()từ một ánh xạ, tôi phải thêm tiền tố vào <SID>:

nnoremap {lhs} :<c-u>call <SID>SomeFunction()<cr>

Hoặc thậm chí để lưu trữ đầu ra của nó bên trong một biến:

let myvar = <SID>SomeFunction()

Có một số trường hợp cụ thể mà bạn không muốn sử dụng s:và / hoặc abort?
Nếu vậy, vì lý do gì?

Câu trả lời:


6

Điều này s:đơn giản có nghĩa là bạn không làm ô nhiễm không gian tên toàn cầu. Thông thường bạn sẽ làm điều này nếu đó là một chức năng không cần phải được gọi bởi người dùng. Đối với abortcờ, đây là những gì các tài liệu :help :func-abortnói:

Khi đối số [hủy bỏ] được thêm vào, hàm sẽ hủy bỏ ngay khi phát hiện thấy lỗi.

Nếu chức năng của bạn không thực hiện bất kỳ thiết lập nào và sẽ không phá vỡ bất cứ điều gì nếu nó không thể tự phá hỏng khi gặp lỗi, thì có lẽ sẽ ổn khi sử dụng nó. (nghĩa là, nếu bạn muốn âm thầm hủy bỏ nếu xảy ra lỗi)


Tôi nghĩ rằng cách tốt nhất là luôn luôn sử dụng abortvà sử dụng try/ finallycho bất kỳ sự cố nào. đây không phải là trường hợp à?
ivan
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.