RBS เป็นภาษาที่ใช้อธิบายโครงสร้างของโปรแกรม Ruby คุณสามารถเขียนคำจำกัดความของคลาสหรือโมดูลได้: วิธีการที่กำหนดไว้ในคลาส ตัวแปรอินสแตนซ์และประเภท และความสัมพันธ์แบบสืบทอด/แบบผสม นอกจากนี้ยังอนุญาตให้ประกาศค่าคงที่และตัวแปรทั่วโลก
ต่อไปนี้เป็นตัวอย่างเล็กๆ ของ RBS สำหรับแอปแชท
module ChatApp
VERSION: String
class User
attr_reader login: String
attr_reader email: String
def initialize : (login: String, email: String) -> void
end
class Bot
attr_reader name: String
attr_reader email: String
attr_reader owner: User
def initialize : (name: String, owner: User) -> void
end
class Message
attr_reader id: String
attr_reader string: String
attr_reader from: User | Bot # `|` means union types: `#from` can be `User` or `Bot`
attr_reader reply_to: Message? # `?` means optional type: `#reply_to` can be `nil`
def initialize : (from: User | Bot, string: String) -> void
def reply : (from: User | Bot, string: String) -> Message
end
class Channel
attr_reader name: String
attr_reader messages: Array[Message]
attr_reader users: Array[User]
attr_reader bots: Array[Bot]
def initialize : (name: String) -> void
def each_member : () { (User | Bot) -> void } -> void # `{` and `}` means block.
| () -> Enumerator[User | Bot, void ] # Method can be overloaded.
end
end
3.2
ณ ปี 2023)>= 3.0
ณ ปี 2023) ติดตั้งอัญมณี rbs
$ gem install rbs
จากบรรทัดคำสั่งหรือเพิ่มบรรทัดใน Gemfile
ของคุณ
gem "rbs"
Gem มาพร้อมกับเครื่องมือบรรทัดคำสั่ง rbs
เพื่อสาธิตสิ่งที่สามารถทำได้และช่วยพัฒนา RBS
$ rbs version
$ rbs list
$ rbs ancestors ::Object
$ rbs methods ::Object
$ rbs method Object then
ผู้ใช้ rbs
อาจจะพบว่า rbs prototype
มีประโยชน์มากที่สุด คำสั่งนี้สร้างการประกาศลายเซ็นสำเร็จรูปสำหรับไฟล์ Ruby ตัวอย่างเช่น สมมติว่าคุณได้เขียนสคริปต์ Ruby ด้านล่างนี้
# person.rb
class Person
attr_reader :name
attr_reader :contacts
def initialize ( name : )
@name = name
@contacts = [ ]
end
def speak
"I'm #{ @name } and I love Ruby!"
end
end
การรันต้นแบบด้านบนจะสร้างโดยอัตโนมัติ
$ rbs prototype rb person.rb
class Person
@name: untyped
@contacts: untyped
attr_reader name: untyped
attr_reader contacts: untyped
def initialize: (name: untyped) -> void
def speak: () -> ::String
end
โดยจะพิมพ์ลายเซ็นสำหรับวิธีการ คลาส ตัวแปรอินสแตนซ์ และค่าคงที่ทั้งหมด นี่เป็นเพียงจุดเริ่มต้น และคุณควรแก้ไขผลลัพธ์ให้ตรงกับลายเซ็นของคุณให้แม่นยำยิ่งขึ้น
rbs prototype
มีสามตัวเลือก
rb
สร้างจากโค้ด Ruby ที่มีอยู่rbi
สร้างขึ้นจาก Sorbet RBIruntime
สร้างขึ้นจากรันไทม์ API มีสองแนวคิดที่สำคัญ สภาพแวดล้อม และ คำจำกัดความ
สภาพแวดล้อม คือพจนานุกรมที่คอยติดตามการประกาศทั้งหมด การประกาศที่เกี่ยวข้องกับคลาส String
คืออะไร? สภาพแวดล้อม จะให้คำตอบแก่คุณ
คำจำกัดความ จะให้รายละเอียดของชั้นเรียนแก่คุณ ประเภทของค่าตอบแทนของวิธี gsub
ของคลาส String
คืออะไร? คำจำกัดความ ของคลาส String
รู้รายการวิธีการที่มีให้และประเภทของคลาสนั้น
ต่อไปนี้เป็นโค้ดขนาดเล็กเพื่อดึงคำจำกัดความของเมธอด String#gsub
require "rbs"
loader = RBS :: EnvironmentLoader . new ( )
# loader.add(path: Pathname("sig")) # Load .rbs files from `sig` directory
# loader.add(library: "pathname") # Load pathname library
environment = RBS :: Environment . from_loader ( loader ) . resolve_type_names
# ::String
string = RBS :: TypeName . new ( name : :String , namespace : RBS :: Namespace . root )
# Class declaration for ::String
decl = environment . class_decls [ string ]
# Builder provides the translation from `declaration` to `definition`
builder = RBS :: DefinitionBuilder . new ( env : environment )
# Definition of instance of String
instance = builder . build_instance ( string )
# Print the types of `gsub` method:
puts instance . methods [ :gsub ] . method_types . join ( " n " )
# Outputs =>
# (::Regexp | ::string pattern, ::string replacement) -> ::String
# (::Regexp | ::string pattern, ::Hash[::String, ::String] hash) -> ::String
# (::Regexp | ::string pattern) { (::String match) -> ::_ToS } -> ::String
# (::Regexp | ::string pattern) -> ::Enumerator[::String, self]
# Definition of singleton of String
singleton = builder . build_singleton ( string )
# No `gsub` method for String singleton
puts singleton . methods [ :gsub ]
Data
และ Struct
นี่คือรายการสถานที่บางแห่งที่คุณสามารถพูดคุยกับผู้ดูแลที่ทำงานอยู่ได้
rbs
ในเซิร์ฟเวอร์ Ruby Discordtypes
ในพื้นที่ทำงาน ruby-jp slack หลังจากตรวจสอบ repo แล้ว ให้รัน bin/setup
เพื่อติดตั้งการขึ้นต่อกัน จากนั้นรัน bundle exec rake test
เพื่อรันการทดสอบ คุณยังสามารถเรียกใช้ bin/console
เพื่อรับข้อความโต้ตอบที่จะช่วยให้คุณสามารถทดลองได้
หากต้องการติดตั้ง gem นี้ลงในเครื่องของคุณ ให้รัน bundle exec rake install
หากต้องการออกเวอร์ชันใหม่ ให้อัปเดตหมายเลขเวอร์ชันใน version.rb
จากนั้นเรียกใช้ bundle exec rake release
ซึ่งจะสร้างแท็ก git สำหรับเวอร์ชัน กด git commits และแท็ก แล้วส่งไฟล์ .gem
ไปที่ rubygems.org
รายงานข้อผิดพลาดและคำขอดึงข้อมูลยินดีต้อนรับบน GitHub ที่ https://github.com/ruby/rbs