`
CharlesCui
  • 浏览: 427774 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关键字和预定义变量:__END__和DATA的问题

阅读更多
两个文件,a.rb和b.rb
当a.rb中有__END__表示的注释,并且需要通过DATA关键字来获得的时候,
如果直接执行a.rb,也就是当$0和__FILE__为同一文件对象时,
DATA可以读取到a.rb中__END__后面的内容.

如果a.rb被b.rb调用执行,
比如b.rb中load "a.rb",
这样a.rb中的DATA其实是b.rb中的对象,所以DATA只能得到b.rb中的__END__之后的内容.


一直很期待能有个解决方法让a.rb不论如何执行都可以得到本身的DATA对象,
但问了核心开发组,结果Ruby他爸Matz说没办法.
那我只能把本来写在__END__后面的内容单独写到一个模板文件中,然后然a.rb读取这个文件对象当作DATA对象了.



引用
Charles Cui 发送至 ruby-core
显示详细信息 15:33 (18 小时前)
how to get global constant DATA in file <a.rb>,if a.rb is loaded by b.rb.
when b.rb is exec by Ruby,even if the DATA is used in a.rb,infact the DATA is from b.rb,
because a.rb is loaded by b.rb.

how to resolve it?

such as:

<b.rb> :

Cui$ cat /usr/local/ruby-1.8.7-p160/bin/roadrunner
#!/usr/local/ruby-1.8.7-p160/bin/ruby
#
# This file was generated by RubyGems.
#
# The application 'roadrunner' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end

gem 'roadrunner', version
load Gem.bin_path('roadrunner', 'roadrunner', version)

<a.rb>
#this is code

__END__
#!/usr/bin/env ruby
#main.rb
#this is the DATA
  回复
转发
回复所有人
Charles Cui 发送至 ruby-core
显示详细信息 15:33 (18 小时前)
- 显示引用文字 -
回复
转发
回复所有人
Yukihiro Matsumoto 发送至 ruby-core
显示详细信息 15:56 (18 小时前)
Hi,

In message "Re: [ruby-core:30175] [Problem] DATA and __END__ in a loaded rb file"
   on Wed, 12 May 2010 16:33:57 +0900, Charles Cui <zheng.cuizh@gmail.com> writes:

|how to get global constant DATA in file <a.rb>,if a.rb is loaded by b.rb.
|when b.rb is exec by Ruby,even if the DATA is used in a.rb,infact the DATA
|is from b.rb,
|because a.rb is loaded by b.rb.

DATA is only available from the script file.

                                                       matz.


回复
转发
回复所有人
Urabe Shyouhei 发送至 ruby-core
显示详细信息 17:29 (16 小时前)
(2010/05/12 16:56), Yukihiro Matsumoto wrote:
> DATA is only available from the script file.

True, but I know the reporter's feeling.  Ruby stops parsing at __END__ even on
a library file so it's natural for a programmer to expect DATA be file local.
Can there be any future addition of DATA[__FILE__] or something like that?

回复
转发
回复所有人
Magnus Holm 发送至 ruby-core
显示详细信息 17:35 (16 小时前)
Right now you'll have to do something like:

data = File.read(__FILE__) =~ /^__END__\n/ && $' || ''

// Magnus Holm
- 显示引用文字 -
2
2
分享到:
评论

相关推荐

    div_2_verilog_verilog中<div>_vivado_源码

    模块定义以`module`关键字开始,后跟模块名,接着是输入和输出端口列表。例如: ```verilog module div_2( input wire clk, // 时钟信号 input wire [7:0] data_in, // 输入数据 output wire [3:0] data_out1, /...

    FPGA基本语法总结 fpga开发.pdf

    * `reg`关键字用于声明寄存器变量,例如:`reg [3:0] Data_in;` * `wire`关键字用于声明总线变量,例如:`wire [6:0] Data_out;` * 变量的位宽可以使用`[n:m]`格式指定,例如:`reg [3:0] Data_in;` 三、模块实例化...

    ASP获取标题关键字,带实际例子,带数据库

    在ASP中获取标题关键字,主要是为了实现网站SEO(搜索引擎优化),帮助搜索引擎更好地理解和索引网页内容。下面将详细介绍如何在ASP中操作这个过程,并结合实际例子和数据库的使用进行讲解。 一、HTML头部和标题...

    c语言关键字汇总

    - `signed` 关键字用于声明有符号类型变量或函数,这类变量可以表示负数和正数。 - 示例: ```c signed int si = -100; // 有符号整型变量 void func(signed int si); // 函数声明 ``` #### 15. extern:声明...

    关于pl/sql常量和变量

    - 该区域由关键字`BEGIN`和`END`括起来。 **2. 基本流程控制结构** - **条件判断**:使用`IF`、`ELSIF`和`ELSE`语句。 - **循环结构**:使用`FOR`、`LOOP`和`WHILE`等循环语句。 - **分支选择**:使用`CASE`...

    SQL 常用关键字解析

    它们可以是局部变量(由 `@` 开头)或全局变量(使用 `GLOBAL` 关键字声明)。 ```sql DECLARE @local_variable INT; SET @local_variable = 10; ``` 总结以上内容,我们介绍了 SQL 语言中的一些常用关键字,这些...

    data_type_change.rar_数据类型转换

    在 VHDL(VHSIC Hardware Description Language)编程中,数据类型是极其重要的概念,它用于定义信号、变量和常量的取值范围和格式。VHDL 支持多种数据类型,包括基本类型、复合类型以及用户自定义类型。本教程主要...

    Recommended HDL Coding Styles

    - **命名约定**:使用有意义的变量名和模块名。 - **注释**:为复杂的逻辑添加注释以解释其功能。 - **模块化**:尽可能地将设计分解成小模块。 - **可读性**:使用空格和缩进来增强代码的可读性。 - **一致性**:在...

    SAP的ABAP4语言中文培训教材第一部分第三章 声明数据.docx

    - DATA语句:声明变量,如`DATA: my_var TYPE i.`声明一个整型变量my_var。 - CONSTANTS语句:声明常量,如`CONSTANTS my_const VALUE 'Hello'.`声明一个字符串常量my_const。 - STATICS语句:声明静态变量,全局...

    VB.NET Step By Step 系列课程(3):语言_语法的改进(教程).zip

    在处理临时数据集合时,匿名类型非常有用,它允许我们创建一个没有预定义类型的对象,其属性与字面量数据匹配: ```vb.net Dim customers = From c In customerList Select New With { .Name = c.Name, .Age = c...

    C51中的关键字-51单片机

    ### C51关键字详解 #### 一、标准C语言关键字 C51是基于标准C语言的一种扩展,它兼容标准C的关键字,并在此基础上增加了针对单片机编程的支持。下面是一些基本的关键字: 1. **auto** - **含义**:用于声明变量...

    Oracle存储过程的基本语法

    这里,`PROC_NAME`是存储过程的名称,`ARG1`和`ARG2`是输入参数,`IS`关键字后定义了局部变量。 2. **SELECT INTO 语句**: 用于将查询结果存入变量。例如: ```sql BEGIN SELECT col1, col2 INTO 变量1, ...

    Abap基础学习文档6_处理数据.doc

    - 使用`DATA`关键字声明变量。 ```abap DATA lv_num TYPE i. "整型变量 DATA lv_str TYPE string. "字符串变量 ``` 4. **赋值操作**: - 可以使用`=`, `MOVE`, 或 `CONCATENATE` 进行赋值。 ```abap lv_num...

    整理的SAP_abap学习的资料

    - 引用自定义数据类型:`Type char_six(6) type c.`定义了一个名为char_six的字符型数据类型,然后`Data chs type char_six.`创建了一个基于此类型的变量chs。 - 引用SE11中预定义的数据类型:SE11是ABAP的数据...

    初学ABAP的教程

    ABAP中变量的声明使用`DATA`关键字,基本格式如下: ```abap DATA:&lt;variable_name&gt; type &lt;data_type&gt; [value &lt;initial_value&gt;] [decimals &lt;decimal_places&gt;]. ``` - `&lt;variable_name&gt;`: 变量名称。 - `&lt;data_type&gt;...

    Abap基础学习文档3_声明数据.doc

    1. **基本数据类型** - 预定义的:这是系统预先定义的一系列数据类型,如I(整数)、F(浮点数)、C(字符)、D(日期)和T(时间)。这些类型满足日常编程的基本需求。 2. **基本数据类型** - 用户定义的:在某些...

    PLSQL最佳实践

    - 直接串联变量值可能会导致安全问题和语法错误。 - 示例:`EXECUTE IMMEDIATE 'SELECT * FROM ' || v_table_name || ' WHERE id = ' || v_id;` **3.16.3 禁止那些恶意的程序代码进入动态语句** - 验证和清理所有...

    Fortran快速入门_Fortran_

    1. 变量声明:Fortran中的变量需要先声明后使用,类型包括INTEGER、REAL、COMPLEX和CHARACTER等。例如: ```fortran INTEGER :: age REAL :: weight ``` 2. 注释:Fortran的注释以感叹号(!)开始,直到行尾。 ```...

    C语言中的关键字说明

    `auto`关键字用于声明变量,并告诉编译器根据初始化表达式的类型自动确定变量的数据类型。例如: ```c auto x = 5; // x 将被推断为 int 类型 ``` #### 2. double `double`关键字用于声明双精度浮点类型的变量或...

    oracle学习文档

    此外,Oracle提供了一套丰富的异常处理机制,包括预定义异常和用户自定义异常,用于处理程序运行时可能出现的错误情况。 ```sql BEGIN IF 条件 THEN -- 条件为真时执行的代码 ELSIF 其他条件 THEN -- 多个条件...

Global site tag (gtag.js) - Google Analytics