`

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; 包含翻译后...

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

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

    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; 包含翻译后...

    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; 包含翻译后...

    Api-api_struct.zip

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

    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; 包含翻译后...

    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.zip

    相对于springBeanUtils更加高效的对象复制方法mapstruct

    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....

    dataStruct:算法与数据结构学习

    dataStruct:算法与数据结构学习

    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...

    key_struct:key_struct 宝石

    定义KeyStruct ,它的作用与 ruby​​ 的 Struct 相同,但结构的初始值设定项采用关键字 args(使用哈希,rails 样式)。 使用它通过以下方式定义类: Name = KeyStruct[:first, :last] 或作为您自己的增强结构的...

    ts-data-struct:打字稿数据结构项目

    ts-data-struct:打字稿数据结构项目

    php-struct:PHP7的简单结构

    PHP结构受golang启发PHP7结构用法 struct ( 'User' , [ 'name' => 'string' , 'age' => 'int' ...// Fatal error: Uncaught InvalidArgumentException: Struct does not contain property `email`$ user [ 'age' ] = '2

Global site tag (gtag.js) - Google Analytics