RBS هي لغة لوصف بنية برامج روبي. يمكنك كتابة تعريف فئة أو وحدة نمطية: الأساليب المحددة في الفئة، ومتغيرات الحالة وأنواعها، وعلاقات الوراثة/الخلط. كما يسمح بإعلان الثوابت والمتغيرات العالمية.
فيما يلي مثال صغير على 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"
تأتي الجوهرة مع أداة سطر أوامر rbs
لتوضيح ما يمكنها فعله والمساعدة في تطوير RBS.
$ rbs version
$ rbs list
$ rbs ancestors ::Object
$ rbs methods ::Object
$ rbs method Object then
من المحتمل أن يجد المستخدم النهائي لـ rbs
rbs prototype
هو الأكثر فائدة. يقوم هذا الأمر بإنشاء إعلانات التوقيع المعياري لملفات روبي. على سبيل المثال، لنفترض أنك كتبت نص روبي أدناه.
# 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
من كود روبي المتاح فقطrbi
من Sorbet RBIruntime
من واجهة برمجة تطبيقات وقت التشغيل هناك مفهومان مهمان، البيئة والتعريف .
البيئة عبارة عن قاموس يتتبع جميع الإعلانات. ما هو الإعلان المرتبط بفئة 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 Discord.types
في مساحة عمل Ruby-jp Slack. بعد التحقق من الريبو، قم بتشغيل bin/setup
لتثبيت التبعيات. ثم قم بتشغيل bundle exec rake test
لإجراء الاختبارات. يمكنك أيضًا تشغيل bin/console
للحصول على مطالبة تفاعلية تسمح لك بالتجربة.
لتثبيت هذه الجوهرة على جهازك المحلي، قم بتشغيل bundle exec rake install
. لإصدار إصدار جديد، قم بتحديث رقم الإصدار في version.rb
، ثم قم بتشغيل bundle exec rake release
، والذي سينشئ علامة git للإصدار، ويدفع التزامات git وعلاماته، ويدفع ملف .gem
إلى Rubygems.org.
نرحب بتقارير الأخطاء وطلبات السحب على GitHub على https://github.com/ruby/rbs.