sách gpt4 ai đã đi

Tóm tắt Ruby

In lại 作者:太空宇宙 更新时间:2023-11-03 17:09:00 28 4
mua khóa gpt4 Nike

我是 Ruby 的新手,主要来自 C# 和 ActionScript 3(以及其他语言)。我对抽象功能很好奇。具体来说,包装和抽象 Ruby 的 FTP 和 SFTP 库。

我四处搜索,发现了一个名为 Backup 的 gem .它确实引起了我的注意,因为它支持通过 S3、SCP、SFTP 和 FTP 备份内容。所以我想,“哇,这是一个完美的例子!”我开始浏览源代码,但后来我遇到了如下代码:

case backup.procedure.storage_name.to_sym
when :s3 then records = Backup::Record::S3.all :conditions => {:trigger => trigger}
when :scp then records = Backup::Record::SCP.all :conditions => {:trigger => trigger}
when :ftp then records = Backup::Record::FTP.all :conditions => {:trigger => trigger}
when :sftp then records = Backup::Record::SFTP.all :conditions => {:trigger => trigger}
kết thúc

view the full source on GitHub

里面到处都是 case/when 语句!如果我在 C# 中对此进行攻击,我会编写一个协议(protocol)接口(interface)(或抽象类)并让 FTP 和 SFTP 实现它。然后我的客户端类将只传递一个 Protocol 实例而不关心实现。零开关/案例。

在使用 Ruby 编写代码时,如果能提供一些关于最佳实践的指导,我将不胜感激。

1 Câu trả lời

你也可以在 Ruby 中这样做

因为动态类型 Ruby 不需要接口(interface)。就此而言,它不需要原型(prototype)、签名或模板,即使存在子类也不是绝对必要的。

当我说“不需要”时,我的意思是您所指的设计模式可以直接在 Ruby 中实现。因为在“编译时”没有强制执行调用限制,所以任何依赖于接口(interface)或任何风格的多态性的设计模式都可以直接在 Ruby 中使用。

是的,看起来好像那个包并没有充分利用可能的抽象,但也许 (a) 它并不重要,只要它有效。毕竟,您不需要输入它,或者 (b) 使用的简单组合模式有一些不是立即显而易见的好处。

关于 ruby 抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1944373/

28 4 0
Bài viết được đề xuất: shell - inotifywait 与 Docker 命令和变量
Bài viết được đề xuất: c# - 属性 : private method or private get/set?
Bài viết được đề xuất: ruby - 安装 Open Project 7(Apache 错误 : Service Unavailable)
Bài viết được đề xuất: c# - 将相对网址替换为绝对网址
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com