`

Struct:簡單的宣告物件方式

    博客分类:
  • ruby
阅读更多
在 PHP 裡面,很多時候我們會用到 Hash 來傳遞變數,像是 $something['abc']['def'] 之類的方式,或許這是一個在效率上面很好的實做方式,但是總是...怪怪的,不是那麼的優雅。在 Rails 裡面,難免會有 controller 傳遞變數到 view 裡面的時候,這個時候通常是用 flash 這個內定的 Hash 來傳遞,但是也會遇到相同的問題,就是 Hash 實在是不夠物件導向。

flash[:somthing][:abc][:def]

這樣的寫法到底是好還是不好呢?很多時候我很想說服自己這樣就好了,code work 即可,但是心中把這種事情物件導向化的想法一直沒變。所以我就開始 survey ,該怎麼作會比較 OO 呢?

我將訊息傳遞的 Object 宣告成一個 Model 上面好不好?code 很好看,可是心理總覺得小題大作了點,明明一個 Hash 就可以解決的事情,需要特別使用一個 Model 物件來寫嗎?有沒有辦法可以超快速的把訊息傳遞包成一個簡單的物件,而且裡面不需要 method ,只需要幾個 message 的 attribute 即可?

我看到了 Struct ,他的作法很簡單

宣告一個 class definition

class_def = Struct.new( :name, :address, :zip )


就是宣告一個 class 的定義叫做 class_def,裡面一共有 name ,address,zip 幾個變數。

New Object 

當我們需要 new 一個 object ,我們把他叫做 obj

obj = class_def.new

如此即可。以後就可以這樣使用

obj.name
obj.address
obj.zip

Constructor

一開始,所有的變數都是 nil,這是因為沒有 constructor去宣告初始值。在 Struct 裡面有辦法達成嗎?當然有,在 new 這個 object 時這樣作

obj = class_def.new( 'a' , 1 , '123')

即可。

我的使用方式

我常常這樣使用Struct 來做 message passing 的 object,一行即可做到 new 一個我自己定義的 message object

msg = Struct.new( :error , :alert , :warning).new

如此的寫法對我來說,比 flash[:error] 來的更為優雅。

這個東西與其說是技巧,不如說是一個物件導向的偏執分子的固執行為,沒什麼了不起。你依舊可以用 Hash 達成每一件 Struct 做的到的事情。
分享到:
评论

相关推荐

    mapstruct-1.3.1.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-1.3.1.Final.jar; 赠送原API文档:mapstruct-1.3.1.Final-javadoc.jar; 赠送源代码:mapstruct-1.3.1.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.3.1.Final.pom; 包含翻译后...

    Struct::Compare-开源

    这个工具的目的是提供一种深度比较的方式,确保在比较复杂数据结构时,包括内部的哈希(hash)结构也能得到正确的比较结果。这对于编写单元测试来说尤其重要,因为单元测试通常需要精确地验证函数或方法的输出是否与...

    jstruct:将字节解释为打包的二进制数据

    构造将字节解释为打包的二进制数据##安装Gradleimplemention ' com.lingyun.lib:jstruct:0.0.8 '玛文< dependency> < groupId>com.lingyun.lib</ groupId> < artifactId>jstruct</ artifactId> < version>0.0.8...

    mapstruct-1.2.0.Final-API文档-中文版.zip

    赠送jar包:mapstruct-1.2.0.Final.jar; 赠送原API文档:mapstruct-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.2.0.Final.pom; 包含翻译后...

    Api-api_struct.zip

    Api-api_struct.zip,具有响应序列化apiStruct的api包装生成器由两个主要接口组成:apiStruct::客户端和apiStruct::实体。客户机类旨在使用相同的接口来描述对不同api的请求。实体使您能够使用类似于orm的api...

    mapstruct-1.1.0.Final-API文档-中文版.zip

    赠送jar包:mapstruct-1.1.0.Final.jar; 赠送原API文档:mapstruct-1.1.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.1.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.1.0.Final.pom; 包含翻译后...

    mapstruct-1.3.1.Final-API文档-中文版.zip

    赠送jar包:mapstruct-1.3.1.Final.jar; 赠送原API文档:mapstruct-1.3.1.Final-javadoc.jar; 赠送源代码:mapstruct-1.3.1.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.3.1.Final.pom; 包含翻译后...

    dbix-struct:带类的便捷SQL函数

    名称DBIx :: Struct-具有类:: Struct的行对象的便捷SQL函数概要use DBIx::Struct;DBIx::Struct::connect($data_source, $username, $auth);my $row = one_row("table", $idField);print $row->field;$row->field('...

    mapstruct-1.1.0.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-1.1.0.Final.jar; 赠送原API文档:mapstruct-1.1.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.1.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.1.0.Final.pom; 包含翻译后...

    mapstruct-1.2.0.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-1.2.0.Final.jar; 赠送原API文档:mapstruct-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.2.0.Final.pom; 包含翻译后...

    mapstruct.zip

    它通过代码生成的方式,极大地提高了在Spring框架中进行对象复制的效率,相比传统的`Spring BeanUtils`或者`ModelMapper`等工具,MapStruct具有更高的性能和更简洁的API。本文将深入探讨MapStruct的工作原理、优点、...

    kaitai_struct:Kaitai Struct:使用C ++ C#生成二进制数据解析器的说明性语言Java JavaScript Lua Perl PHP Python Ruby

    1. **声明式语言**:Kaitai Struct 的语法允许开发者用一种直观的方式描述二进制数据的结构,而无需关注底层的解析细节。这种抽象让代码更易于理解和维护。 2. **多语言支持**:Kaitai Struct 可以生成多种编程语言...

    ocaml-cstruct:将OCaml数组映射到类似C的结构上

    Cstruct-直接从OCaml访问类似C的结构 %%版本%% Cstruct是一个库和语法扩展,可让您更轻松地直接从OCaml访问类似C的结构。 它支持对这些结构的读取和写入,并且可以通过Bigarray模块对其进行访问。 安装 该存储...

    data-struct:一个简单的gem,它在Ruby中实现了几个有用的数据结构

    数据结构一个简单的gem,在Ruby中提供了几个有用的数据结构。 ##用法安装gem: gem install data - struct 或在Gemfile中要求: gem 'data-struct' 然后跑 bundle install要使用gem,请通过DataStruct模块(可选)...

    scala-struct:用于内存优化结构的 Scala 库

    作为依赖使用配置您的 Maven、Gradle 或 SBT 构建脚本以使用 Sonatype OSS 发布存储库并将依赖项添加到 Scala Struct。 Gradlerepositories { maven { url " ...

    mapstruct:用于生成类型安全的bean映射器的注释处理器

    MapStruct-Java Bean映射,简单方法!什么是MapStruct? MapStruct是一个Java用于为Java Bean类生成类型安全和高性能的映射器。 它使您不必手工编写映射代码,这是一个繁琐且容易出错的任务。 该生成器具有合理的...

    mapstruct-jdk8-1.2.0.Final-API文档-中文版.zip

    赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....

    mapstruct-jdk8-1.2.0.Final-API文档-中英对照版.zip

    赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....

    mapstruct-processor-1.2.0.Final-API文档-中文版.zip

    赠送jar包:mapstruct-processor-1.2.0.Final.jar; 赠送原API文档:mapstruct-processor-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-processor-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct...

    datastruct:datastruct测试

    在这个名为"datastruct:datastruct测试"的项目中,我们可以推测这是一个用于学习和实践数据结构的练习或测试。 首先,让我们从"Python"这个标签入手。Python是一种多用途的、解释型的编程语言,以其简洁明了的语法...

Global site tag (gtag.js) - Google Analytics