- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 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 不需要接口(interface)。就此而言,它不需要原型(prototype)、签名或模板,即使存在子类也不是绝对必要的。
当我说“不需要”时,我的意思是您所指的设计模式可以直接在 Ruby 中实现。因为在“编译时”没有强制执行调用限制,所以任何依赖于接口(interface)或任何风格的多态性的设计模式都可以直接在 Ruby 中使用。
是的,看起来好像那个包并没有充分利用可能的抽象,但也许 (a) 它并不重要,只要它有效。毕竟,您不需要输入它,或者 (b) 使用的简单组合模式有一些不是立即显而易见的好处。
关于 ruby 抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1944373/
Tôi hơi bối rối về tính trừu tượng trong Java. Tôi đã kiểm tra nhiều trang nói rằng trừu tượng hóa là ẩn dữ liệu (ẩn triển khai). Theo tôi hiểu, trừu tượng là một "sự triển khai một phần". Chỉ cần xác định những gì bạn cần trong các lớp/giao diện trừu tượng, sau đó mở rộng/triển khai chúng và thêm
Tôi mới làm quen với Ruby, chủ yếu sử dụng C# và ActionScript 3 (cùng với một số ngôn ngữ khác). Tôi tò mò về chức năng trừu tượng. Cụ thể là gói và tóm tắt các thư viện FTP và SFTP của Ruby. Tôi tìm kiếm xung quanh và tìm thấy một
Nội dung Java cơ bản (Tóm tắt) Tóm tắt Định nghĩa của abstract Sử dụng abstract Định nghĩa của abstract class
Tôi đã dành thời gian trong tháng này để vật lộn với Emacs Lisp, cố gắng để chức năng tự động thụt lề hoạt động tốt hơn theo nhu cầu của tôi. Thật đáng ngạc nhiên khi hầu hết mã thụt lề ở cấp độ thấp. Tôi chỉ thấy một vài sự trừu tượng như tìm kiếm biểu thức chính quy đầu tiên không có trong chuỗi hoặc bình luận
Tôi có những điều sau đây: public abstract class Foo{ //nội dung của Foo // ... public class Bar mở rộng
Tôi có ba lớp (lớp A, lớp B và lớp C). Lớp A gọi một thể hiện của B và chạy start(). Lớp B mở rộng Thread, do đó khi start() được gọi, mọi thứ trong phương thức run() sẽ được thực thi. hiện hữu
Câu hỏi này đã có câu trả lời: Gọi phương thức lớp con từ lớp cha (5 câu trả lời) Đã đóng 7 năm trước. Klasse1 là lớp trừu tượng có một phương thức foo(). K
Tôi có một hàm như thế này: def test(): x = "3" # Trong mã thực tế, hàm này được tính nếu x là None: return
Tôi có mối quan hệ giữa hai lớp cơ sở: public abstract class RecruiterBase { // Thuộc tính khai báo ở đây // Các hàm tạo khai báo
Đây là lần đầu tiên tôi đăng bài và tôi đang gặp phải rất nhiều vấn đề. Hiện tại tôi có một lớp AbstractDevice có tiêu đề: public abstract class AbstractDevice> implements De
Tôi có một lớp MotorDefinition và một lớp trừu tượng có tên là Motor: class MotorDefinition { public: MotorDefinition(int p1,
Có cách nào để tạo các quy tắc trừu tượng của css trong loại mã này (sass): #cottage-image-gallery input:nth-of-type(1):checked ~ label:nth-o
Có thể khai báo một kiểu cơ sở đã biết và cho phép chuyển giao tất cả các kiểu dẫn xuất không? [ServiceContract] giao diện công khai IService { [OperationContract]
Hiện tại tôi đang phát triển cơ chế tạo nhân vật cho một trò chơi văn bản dựa trên Java, nhưng tôi gặp phải một vấn đề và không biết lỗi ở đâu. Tôi có lớp "Character" là lớp trừu tượng và một lớp khác là "NPCharacter" được xây dựng dựa trên lớp này.
Xin lỗi, tiêu đề gây nhầm lẫn. Không chắc chắn lắm về cách diễn đạt, có thể đó là vấn đề! Tôi đang tìm một sự trừu tượng tốt để sử dụng cho các tình huống liên quan đến luồng đồng thời. Tôi đã gần đến đích rồi, nhưng vẫn chưa hoàn toàn. Để đơn giản hóa một chút, tôi đã thu thập hai cảm biến trên điện thoại Android của mình
Cảm ơn bạn trước vì đã đọc bài viết này. Tôi không hiểu đầy đủ về cách/thời điểm sử dụng đoạn trích, vì vậy tôi cố gắng nghĩ về nó trong mọi dự án tôi làm và xem liệu một ngày nào đó mọi thứ có ổn không. Cười | :) Ngoài ra, các mức độ truy cập (riêng tư, được bảo vệ
Tôi đang khám phá meme XML -> XSLT -> HTML để tạo nội dung web. Tôi có rất ít kinh nghiệm với XSLT. Tôi tò mò muốn biết có những cơ chế nào trong XSLT để xử lý trừu tượng hóa hoặc "tái cấu trúc". Ví dụ, sử dụng HTML chung và
Trong các buổi nói chuyện này, Nicholas Zakas và Addy Osmani thảo luận về ý tưởng sử dụng mô hình facade như một hộp cát khi xây dựng các ứng dụng Javascript lớn nhằm tách ứng dụng khỏi các thư viện cơ sở bên dưới. Sự tách rời này về mặt lý thuyết cho phép
Tôi đang sử dụng C++ và CUDA/C và muốn viết mã cho một vấn đề cụ thể, nhưng tôi gặp phải một vấn đề đơn giản hóa rất khó khăn. Kinh nghiệm của tôi với lập trình song song không phải là không đáng kể nhưng khá hạn chế, và tôi không thể lường trước được hết những đặc thù của vấn đề này. Tôi nghi ngờ liệu có cách nào thuận tiện hay thậm chí là "dễ dàng" không
Giả sử tôi có: trait A class B extends A class C extends A Có cách nào để cấu hình tham số kiểu không: class Foo[AType <: A with canCreateIn
Tôi là một lập trình viên xuất sắc, rất giỏi!