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

[转]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语法基础教程

    §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单元测试框架 ...

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

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

    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

    Selenium-Webdriver系列教程.docx

    本文中所以代码和示例均由Ruby编写,本文介绍的webdriver api也主要是ruby binding。所以首先请确保ruby语言在开发环境上正确安装。

    浅析Ruby中的DATA对象

    ERB.new(data).result(binding) } __END__ &lt;html&gt; &lt;head&gt; &lt;&#37;= title %&gt; &lt;/head&gt; &lt;body&gt; &lt;h1&gt; &lt;&#37;= title %&gt; &lt;&#37;= content %&gt; &lt;/body&gt; &lt;/html&gt; ...

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

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

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

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

    cztop:Ruby的CZMQ绑定

    CZ顶部 CZTop是Ruby的CZMQ绑定。 它基于 ,它是生成的的低级FFI绑定,并致力于易于使用Rubyists(POLS)并为安全机制... API文档中有更多信息。 特征 类似于Ruby的API 方法名称 通过套接字发送消息是通过Socket#&lt;

    Selenium-Webdriver系列教程

    本文中所以代码和示例均由Ruby编写,本文介绍的webdriver api也主要是ruby binding。所以首先请确保ruby语言在开发环境上正确安装。 教程的第一节从selenium 2.0和webdriver关系说起。 Selenium 2.0 和webdriver之间...

    forward-proxy:仅使用标准库的150 LOC Ruby正向代理

    仅使用标准库的100 LOC Ruby转发代理。 $ forward-proxy --binding 0.0.0.0 --port 3182 --threads 2 [2021-01-14 19:37:47 +1100] INFO Listening 0.0.0.0:3182 [2021-01-14 19:38:24 +1100] INFO CONNECT raw....

    debugging:改进您的打印调试

    设置安装宝石: $ gem install debugging binding_of_caller在Ruby中: require 'debugging/all' 您也可以只需要一个功能,而不是要求所有功能,例如: require 'debugging/q' 在 bundler 项目中,您需要将 gem 添加...

    two-way-data-binding

    该项目是通过引导的。 您将在下面找到一些有关如何执行...Ruby on Rails 在开发中代理API请求 配置代理后出现“无效的主机头”错误 手动配置代理 配置WebSocket代理 在开发中使用HTTPS 在服务器上生成动态&lt;met

    best_errors:Better_errors 和 binding_of_caller

    是否厌倦了为每个Rails 项目在 Gemfile 中同时要求better_errors和binding_of_caller而使您的手指陷入僵局? 那么这颗宝石是给你的!安装把它放在你的 Gemfile 中并打包: gem 'best_errors'什么是 ? 它是 Rails ...

    haru转换工具

    haru转换工具,可以转换文件为pdf格式,用C语言编写,因此可以在C/C++中调用。HARU也提供了Ruby,Delphhi,和C#的捆绑(binding)

    rforce:与SalesForce API的简单可用绑定

    binding = RForce :: Binding . new \ 'https://www.salesforce.com/services/Soap/u/20.0' binding . login \ 'email' , 'password' + 'token' 使用OAuth登录 oauth = { :consumer_key =&gt; '...' , # Tokens ...

    撬前调试

    使用文件正文中的binding.pry调试程序。 什么是REPL? 已经通过使用IRB(交互式Ruby)向您介绍了REPL。 REPL代表读取,评估,打印,循环。 它是一个交互式的编程环境,它接受用户的输入,对其进行评估并将结果返回...

    调试与撬001-prework网站

    使用文件正文中的binding.pry调试程序。 什么是REPL? 已经通过使用IRB(交互式Ruby)向您介绍了REPL。 REPL代表读取,评估,打印,循环。 它是一个交互式的编程环境,它接受用户的输入,对其进行评估并将结果返回...

    使用pry-nyc-web-121018进行调试

    使用文件正文中的binding.pry调试程序。 什么是REPL? 已经通过使用IRB(交互式Ruby)向您介绍了REPL。 REPL代表读取,评估,打印,循环。 它是一个交互式的编程环境,它接受用户的输入,对其进行评估并将结果返回...

Global site tag (gtag.js) - Google Analytics