查看: 3215|回复: 9

[已经解决] show这个命令是啥,没有找到?

[复制链接]
梦石
0
星屑
15041
在线时间
2230 小时
注册时间
2019-1-24
回帖
964

R考场第七期纪念奖

发表于 2019-11-18 11:40:46 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
[pre lang="ruby"]str = "66"

def str.show
  p "77"
end

str_clone = str.clone
str_dup = str.dup

str_clone.show #=> "77"
str_dup.show   #=> NoMethodError[/pre]

论坛里面翻到的,下面定义的str.show字符串后面跟了show,我翻F1和论坛没有找到这个是啥意思?
也没有遇到过这么个写法,顶多就是self.方法名

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2019-11-18 12:59:50 | 显示全部楼层
本帖最后由 百里_飞柳 于 2019-11-18 13:03 编辑

str 是 String类的一个实例

def str.show
end
是给这个实例绑定一个方法,名字叫show
之后就能调用 str 的 show 方法来执行内容

而对于其他String类的实例(比如 dup 返回的实例,只会通过String类获得共有的方法),并没有这个show方法


这个东西叫做 单例方法,clone和dup的区别:
https://ruby-china.org/topics/18922

评分

参与人数 2星屑 +50 赞 +2 收起 理由
RyanBern + 50 + 1 认可答案
miantouchi + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
15041
在线时间
2230 小时
注册时间
2019-1-24
回帖
964

R考场第七期纪念奖

 楼主| 发表于 2019-11-18 13:01:42 | 显示全部楼层
百里_飞柳 发表于 2019-11-18 12:59
str 是 String类的一个实例

def str.show


这我还是第一次看到,看一绑定方法的。就看过在类里面定义方法的
class A
  def show
      p "aa"
  end
end

点评

不在类里定义的方法就是所有地方都能用的方法啊..包括事件脚本里也可以调用..  发表于 2019-11-18 13:45
如果你没有替换成功,就把代码移到下面试试  发表于 2019-11-18 13:41
这叫猴子补丁(名字就是这么叫的0.0),当出现同名类里的同名方法时,脚本编辑框左面的列表中,位置靠下的会替换掉位置靠上的  发表于 2019-11-18 13:10
有哪些类可以这么操作?哪些不行?  发表于 2019-11-18 13:07
更新了下回复,毕竟是动态语言,很灵活的  发表于 2019-11-18 13:04
回复

使用道具 举报

老黄鸡

梦石
4
星屑
45694
在线时间
7948 小时
注册时间
2009-7-6
回帖
13337

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2019-11-18 13:52:02 | 显示全部楼层
你这种方式定义的是实例方法,
就好比你定义了两个人类,给其中一个人类定义了尾巴,另一个却没有,
当你调用尾巴函数的时候没有尾巴的人类就会出错了,
正常情况下这些定义都是在“人类”这个大类型里定义的,定义全人类都有尾巴,这样所有人调用尾巴的时候就不会出错了

点评

有尾巴的是赛亚人  发表于 2019-11-21 20:25

评分

参与人数 2星屑 +50 赞 +2 收起 理由
RyanBern + 50 + 1 认可答案
miantouchi + 1 我很赞同

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部