Computer >> Máy Tính >  >> Lập trình >> Ruby

Tùy chọn thông dịch viên Ruby &Cách sử dụng chúng đúng cách

Trình thông dịch Ruby là một chương trình đọc và chạy mã Ruby.

Nhưng…

Bạn có biết rằng trình thông dịch Ruby (MRI) mặc định có rất nhiều tùy chọn dòng lệnh thú vị và hữu ích không?

Thích :

ruby -v

Điều này cung cấp cho bạn phiên bản Ruby mà bạn đang sử dụng ngay bây giờ.

Hoặc -e cờ cho phép bạn chạy một chút mã trực tiếp, không cần tệp và không cần phải truy cập vào irb .

Như thế này :

ruby -e 'puts 123'

Bạn có thể tìm thấy các cờ này bằng cách sử dụng -h .

Có một số cờ “ẩn” mà bạn chỉ có thể nhìn thấy với --help .

Đây là bảng những gì tôi nghĩ là…

Những lá cờ thú vị nhất :

Gắn cờ Mô tả
- v Phiên bản Ruby in
- c Kiểm tra cú pháp
- e Chạy mã trực tiếp
- w Bật cảnh báo
- r Yêu cầu tệp / đá quý
- Tôi Thêm thư mục vào đường dẫn tải
- bật đông lạnh-chuỗi-chữ Cố định tất cả các chuỗi
- bộ phân tích cú pháp kết xuất Hiển thị cây phân tích cú pháp

Hãy tập trung vào một số cờ này để xem chúng hoạt động như thế nào!

Kiểm tra cú pháp

Nếu bạn có mã và bạn muốn biết liệu cú pháp có chính xác hay không, bạn có thể sử dụng -c Tùy chọn CLI.

Ví dụ :

ruby -c code_without_syntax_errors.rb
# Syntax OK

ruby -c code_with_syntax_errors.rb
# syntax error, unexpected tIDENTIFIER, expecting end-of-input

Đơn giản, nhưng nó hoạt động 🙂

Yêu cầu nhanh

Đôi khi bạn muốn tạm thời yêu cầu một viên ngọc vào một chương trình Ruby mà không cần phải viết "yêu cầu" trên đầu tệp của bạn.

Giống như một viên ngọc gỡ lỗi.

Ví dụ :

ruby -rpry code.rb

Rất hữu ích!

Cờ cảnh báo

Sử dụng cờ cảnh báo sẽ cho phép in linting và hiển thị cho bạn các sự cố có thể xảy ra với mã của bạn.

Ví dụ:mã này :

p @test

In cảnh báo sau khi bạn sử dụng ruby -w :

warning: instance variable @test not initialized

Đây là một cảnh báo tốt!

Bởi vì bạn có thể đang cố gắng sử dụng một biến cá thể mà không đặt giá trị cho nó trước.

Hoặc bạn có thể mắc lỗi đánh máy trong tên biến phiên bản mà cờ này có thể giúp bạn tìm ra trước khi nó trở thành vấn đề.

Cách khắc phục rất đơn giản :

@test = nil

Đây là một ví dụ khác:

c = 1

Điều này sẽ mang lại cho bạn :

warning: assigned but unused variable - c

Để khắc phục cảnh báo này, bạn có thể xóa hoặc sử dụng biến.

Điều này chỉ hoạt động đối với biến cục bộ .

Nhưng bạn nên biết rằng bên trong các đối số khối, nó được coi là "phương pháp hay nhất" để thay thế các đối số không sử dụng bằng dấu gạch dưới (_ ).

Ví dụ :

{ chocolate: 82 }.map { |k, _| k }

Đây là quy ước chung trong Ruby.

_ không phải là đặc biệt, nó chỉ là một tên biến hợp lệ.

Các ví dụ cảnh báo khác

Kết quả của mã sau không được trả về từ một phương thức hoặc được gán cho bất kỳ biến nào.

2 * 2

Ruby cảnh báo bạn thích điều này :

warning: possibly useless use of * in void context

Cách khắc phục?

Xóa câu lệnh vô ích hoặc gán nó cho một biến.

Bây giờ chúng ta hãy xem xét phương pháp này :

def orange(weight, quantity)
  # ...
end

Có nhiều cách khác nhau để gọi orange :

orange 100, 2
orange(100, 2)

orange *[100, 2]
orange(*[100, 2])

Nếu bạn sử dụng orange *[100, 2] với cảnh báo được bật, bạn sẽ nhận được điều này:

warning: '*' interpreted as argument prefix

Điều gì đang xảy ra?

Sự mơ hồ.

Ruby nghĩ ý bạn là orange *[100, 2] , thay vì orange *[100, 2] .

Khoảng trắng giữa * &[ tạo ra sự khác biệt vì nó liên kết * với mảng (toán tử biểu tượng) nếu nó bị thiếu hoặc nó nghĩ là * là một cuộc gọi phương thức nếu nó có mặt.

Vì vậy, trong trường hợp này, không gian rất quan trọng.

Bạn có thể khắc phục cảnh báo này bằng cách gọi phương thức theo bất kỳ cách nào khác.

Bây giờ :

Chạy một số mã của riêng bạn với -w gắn cờ và cải thiện nó bằng cách xóa một số cảnh báo 🙂

Đọc-Đánh giá-In-Vòng lặp

Có thể bạn đã quen thuộc với irb &pry, cả hai đều được chúng tôi gọi là REPL.

Sử dụng -n cờ kết hợp với -e gắn cờ bạn có thể nhận được hiệu ứng tương tự với rất ít mã.

Đây là một ví dụ :

echo 'bacon\nchocolate\norange' | ruby -ne 'puts $_.upcase'

# BACON
# CHOCOLATE
# ORANGE

Thao tác này lấy dữ liệu đầu vào từ echo , sau đó đối với mỗi dòng, nó gọi mã của bạn (puts $_.upcase ).

Ở đâu $_ là một biến đặc biệt chứa giá trị đầu vào cuối cùng được đọc bởi gets .

Cờ văn bản chuỗi đóng băng

Ruby 2.3 đã giới thiệu các ký tự chuỗi đông lạnh “magic comment”.

Có vẻ như thế này :

# frozen_string_literal: true

Điều này sẽ đóng băng tất cả các chuỗi của bạn , làm cho chúng bất biến (không thể thay đổi).

Một cách khác để thực hiện việc này là chuyển --enable frozen-string-literal gắn cờ cho Ruby.

Mã này :

str = "abcdef"

str[0] = "b"

Dẫn đến lỗi này khi bạn sử dụng cờ đó:

can't modify frozen String (FrozenError)

Nhưng nếu bạn cần thay đổi chuỗi thì sao?

Sau đó, bạn có thể làm điều này :

str = "abcdef".dup

hoặc cái này :

str = +"abcdef"

Cả hai đều cung cấp cho bạn một chuỗi không cố định để làm việc.

Tóm tắt

Bạn đã tìm hiểu về các tùy chọn dòng lệnh của Ruby, bao gồm cờ phiên bản, cờ cảnh báo và các ký tự chuỗi cố định. Tất cả các cờ này đều có thể hữu ích, hãy thử!

Đừng quên chia sẻ bài viết này để nhiều người hơn có thể hưởng lợi từ nó.

Cảm ơn vì đã đọc 🙂