`
biyeah
  • 浏览: 202883 次
  • 来自: ...
社区版块
存档分类
最新评论

[转]Ruby中的binding

    博客分类:
  • Ruby
 
阅读更多
http://kkito.cn/index.php/blog/getArticle/82/ruby_binding
之前在看erb如何parse的时候发现使用了binding这个东东,没有怎么在意,后来发现很多地方都用到了这个binding。
    仔细查了一下手册
Objects of class Binding encapsulate the execution context at some particular place in the code and retain this context for future use. The variables, methods, value of self, and possibly an iterator block that can be accessed in this context are all retained. Binding objects can be created using Kernel#binding , and are made available to the callback of Kernel#set_trace_func
    手册上是这么说的,感觉就是context,在context调用,可以得到context的对象,甚至调用context中的方法。相比于java我更倾向于理解成javascript的闭包概念。

class TestBinding
	def initialize
		p "this is initialize"
		@tt = "test value"
	end
	
	def get_binding
		binding
	end
	
	def get_value
		"return a value"
	end
	
	private
	def get_private_value
		"return a private value"
	end
end

def my_value
	"it is my value"
end

obj = TestBinding.new
p obj.get_binding
#得到binding对象的属性
p eval("@tt" , obj.get_binding)
#调用binding对象的方法
p eval("get_value" , obj.get_binding)
#即使他是private的,还是可以通过send来调用
p eval("send('get_private_value')" , obj.get_binding)
#如果没有binding,可以理解为当前,则在当前context内,所有的对象和方法都可以被调用
p eval("obj")
p eval("my_value")
#eval("")
=begin
Process started >>>
"this is initialize"
#
"test value"
"return a value"
"return a private value"
#
"it is my value"
<<< Process finished.
=end

通过binding,send,感觉所有的封装都可以忽略了,java开篇所说的语言的安全性在ruby中根本就无从谈起。看来这些脚本语言还是有很大局限性,不过linux下到是很多软件都是python写的(gtk?)
分享到:
评论

相关推荐

    Ruby-TraceLocation可以帮助您跟踪代码的源位置并帮助您阅读Ruby中庞大的开放源库

    本文将详细介绍`TraceLocation`的用途、工作原理及其在Ruby开发中的应用。 1. **`TraceLocation` 概述** `TraceLocation` 是一个Ruby库,它提供了一种方便的方式来获取和分析代码执行时的源位置信息。这个工具对于...

    Ruby中ERB模板的使用

    Ruby中的ERB(Embedded Ruby)是一种模板引擎,它允许开发者在HTML或者其他文本文件中嵌入Ruby代码,使得静态页面能够动态生成内容。ERB在Web开发中被广泛应用,尤其是在Ruby on Rails框架中,用于生成视图层的HTML...

    Ruby-PryByebug实现在Pry中一步一步调试和堆栈导航

    在Ruby编程语言中,调试是理解代码运行过程和查找错误的关键步骤。`Pry` 和 `Byebug` 是两个非常强大的工具,它们结合起来可以提供一个高效、直观的交互式调试环境。`Pry` 是一个替代 IRB(Interactive Ruby)的 ...

    ruby初学者教程(对初学者很有帮助)

    - **Windows平台**:可以通过RubyInstaller进行安装,安装过程中可以选择是否添加Ruby到系统的PATH环境中。 - **Linux平台**:大多数Linux发行版都提供了Ruby的软件包,可以通过包管理器(如apt-get或yum)轻松安装...

    Ruby-Erubi是ruby的ERB模板引擎

    在这个例子中,`是ERB的输出标签,用于将Ruby表达式的结果插入到输出中,而 `是控制标签,用于执行Ruby代码但不输出结果。 ### Erubi的特点与优势 Erubi是Jarkko Laine为了解决ERB的一些局限性而创建的。它具有...

    RUBY基础入门指南

    - **使用Ruby**:直接在命令行中输入`ruby filename.rb`来运行脚本文件。 - **使用IDE**:推荐使用FreeRIDE或SciTE等集成开发环境,提供更好的编辑体验。 **2.3 Ruby-irb** IRB(Interactive Ruby Shell)是一个...

    ruby语法基础教程

    §13.3.7 Ruby中YAML的使用 99 第十四章 安全控制 100 §14.1 0级 101 §14.1 1级 101 §14.2 2级 101 §14.3 3级 101 §14.4 4级 101 第十五章 单元测试 101 §15.1 什么是单元测试 101 §15.2 Ruby单元测试框架 ...

    浅析Ruby中的DATA对象

    ### Ruby中的DATA对象详解 #### 一、引言 在Ruby编程语言中,存在许多独特且功能强大的特性,其中`DATA`对象就是一种鲜为人知但又非常实用的功能。本文将深入探讨`DATA`对象的基本概念及其使用方法,并通过一个...

    vim-binding-pry:binding.pry 和 binding.remote-pry 的语法高亮

    在Ruby开发环境中,`binding.pry`和`binding.remote-pry`是强大的调试工具,它们允许开发者在代码执行过程中暂停,检查变量状态,甚至修改变量值。这些工具极大地提升了调试效率,尤其对于复杂的代码逻辑来说更为...

    kitchen-binding:在厨房会合期间启动交互式 ruby​​ shell

    厨房装订 kitchen-binding 是的扩展,允许在您的食谱中设置断点。 在融合测试期间遇到时,厨房将登录到交互式 ruby​​ shell 以供您调试。 当你完成后,收敛将继续它离开的地方。 它还将继续选取您在运行过程中可能...

    Rails的中文乱码问题

    标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在...

    Selenium-Webdriver系列教程.docx

    本文主要介绍 Selenium 2.0 的一些基本知识、常用方法和高级扩展,所有代码和示例均由 Ruby 编写,主要是 ruby binding。首先,需要确保 Ruby 语言在开发环境上正确安装。 Selenium 2.0 和 WebDriver 之间的关系是...

    针对Ruby的Selenium WebDriver安装指南

    在Ruby环境中,Selenium WebDriver提供了方便的Ruby绑定(ruby binding),使得Ruby程序员可以轻松地利用这个强大的工具。 首先,让我们深入理解Selenium 2.0与WebDriver的关系。Selenium 2.0实际上就是WebDriver的...

    Ruby

    在控制台中docker-compose run --service-port --rm web以在调试模式下运行rails应用访问要调试的端点,以pry或byebug进入调试模式使用docker的Rails CHEATSHEET docker-compose run --rm web rails new ....

    mysql2-0.3.16.gem

    A simple, fast Mysql library for Ruby, binding to libmysql Gemfile entry -- gem 'mysql2', '0.3.16' Install with GEM -- gem install mysql2 --version 0.3.16

    prybaby:一个用 Pry 做一些额外事情的 Ruby gem

    默认情况下,它会在您当前的工作目录(包括子目录)中搜索 Ruby 源文件,并注释掉其中包含binding.pry任何行。 即使您的代码缩进,它也会将#放在正确的位置,但您的制表符必须由空格组成 - 这对\t制表符还不起作用...

    mruby.cr:Crystal的mruby库绑定。 当前仅生成不安全的绑定。 正在进行中

    mruby是Ruby编程语言的一个轻量级实现,它允许在有限的内存环境中运行Ruby代码。而"mruby.cr"则是将mruby库集成到Crystal的一种方式,使得Crystal开发者可以利用Ruby的某些功能和库。当前,这个绑定可能只生成不安全...

    在Pry中进行逐步调试和堆栈导航-Ruby开发

    执行将在您的binding.pry之后的第一条语句中停止。 def some_method将'Hello World'放入#在控制台中运行'step'以将此处绑定结束。prysome_method#执行将在此处停止。 将“ Goodbye World”放置在控制台中并运行“ ...

Global site tag (gtag.js) - Google Analytics