我一直在阅读有关Ruby的混入方法几篇文章,extend并且include,我还不太清楚有关的行为.我理解extend将给定模块的实例方法作为单例方法添加到执行扩展的模块中,并且include实际上将模块的内容(方法,常量,变量)附加到执行包含的模块中,有效地将它们定义在收件人.
然而,经过一些修补,试图了解行为将如何表现,我有几个问题.这是我的测试设置:
module Baz
def blorg
puts 'blorg'
end
end
module Bar
include Baz
def blah
puts 'blah'
end
end
module Foo
extend Bar
end
class Bacon
extend Bar
end
class Egg
include Bar
end
Run Code Online (Sandbox Code Playgroud)
正如我所期望的那样,模块Bar获得了Baz(#blorg)中定义的实例方法,好像它们由于包含方法而被自己定义,并且类Bacon获得了单例方法Bacon::blah和Bacon::blorg扩展.
Bacon.blah # => blah
Bacon.blorg # => blorg
Run Code Online (Sandbox Code Playgroud)
并且类Egg获得Bar(#blah和现在#blorg)定义的方法作为实例方法.
Egg.new.blah # => blah
Egg.new.blorg # => …Run Code Online (Sandbox Code Playgroud) 这是我第一次尝试使用Javascript和HTML.我正在尝试将点击事件添加到有序列表中的列表项中,但是我正在做的事情的某些方面是行不通的.有人可以为我阐明这一点吗?
我在my head中创建了一个函数,它应该将指定列表的列表项上的所有单击事件委托给给定的函数,并且在该给定函数中,我尝试使用列表项的文本引发一个简单警报.最终我想做更多,但我只是想让简单的点击事件先工作.
<html>
<head>
<script type="text/javascript">
// Attach an event handler to the 'topfriends' list to handle click events.
function attachEventHandlerToList() {
document.getElementById("#top4list").delegate("li", "click", function(clickEvent) {
alert(this.innerHTML());
});
}
</script>
</head>
<body>
<div id="topfriends">
<h3>Top 4 Most Friendable Friends</h3>
<ol id="top4list" onload="attachEventHandlerToList()">
<li>Brady</li>
<li>Graham</li>
<li>Josh</li>
<li>Sean</li>
</ol>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
我已经配置了一个Jenkins作业来获取一个bash脚本,该脚本派生另一个 bash脚本,该脚本.bashrc为其用户添加别名并从中获取源.bashrc,然后原始脚本尝试使用该别名(由第二个设置).但是,它似乎无法找到它刚刚创建的别名.我没有使用任何脚本插件,除了使用"通过SSH发送文件或执行命令"构建步骤来源脚本.
这项工作是这样的:
source ./test_script.sh
Run Code Online (Sandbox Code Playgroud)
test_script.sh 看起来像这样:
echo "In test_script.sh"
echo $USER
echo $HOME
source ./setup_env.sh
echo "\nBack in test_script.sh"
alias foo
foo
Run Code Online (Sandbox Code Playgroud)
最后,setup_env.sh看起来像这样:
echo "\nIn setup_env.sh"
echo "alias foo=\"echo foobar\"" >> $HOME/.bashrc
source $HOME/.bashrc 2>/dev/null
cat $HOME/.bashrc
Run Code Online (Sandbox Code Playgroud)
我从Jenkins工作中收到的输出如下所示:
In test_script.sh
my_user
/home/my_user
\nIn setup_env.sh
...all of my bashrc...
alias foo="echo foo"
\nBack in test_script.sh
alias foo='echo foo'
./test_script.sh: line 7: foo: command not found
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会发生这种情况,当我可以在命令行上自己运行它并观察它是否成功时.为什么詹金斯不能使用新的别名,当它显然可以找到它时(如alias foo命令输出所示)?
我的理解是,数据结构本质上是一个蓝图,其中包含根据其规范创建最终产品所需的所有信息,而数据类型是该设计的物理实现或实现(非常类似于基因型之间的区别)和表型,来自生物学)。
当涉及到面向对象的面向对象编程,这将是准确的说是一个抽象类或接口是一种数据结构,因为它包含了一组值和宣布的行为,以及一类,它实现的是抽象类或接口数据类型,因为它是这些行为的具体体现?
如果是这种情况,那么抽象数据类型(ADT)和数据类型之间的区别又如何呢?它们是真正不同的,还是ADT只是通俗地简称为“数据类型”?
我之所以这样问,是因为在我看来这些术语在交谈中经常互换使用,这让我怀疑我的理解是否不正确。
我刚刚安装了Archbang,并尝试克隆我的Git项目,该项目需要SSH密钥。
在Ubuntu和RedHat机器上,我过去一直遵循Github的成功指南,但是由于某些原因,在我的新Arch安装中,它对我来说不起作用。
我已经使用以下命令成功生成了SSH公钥/私钥对:
ssh-keygen -t rsa -b 4096 -C "email@address"
Run Code Online (Sandbox Code Playgroud)
但是,当我继续启动SSH代理并添加我的公钥时,我遇到了问题。
[user@arch ~]$ eval "$(ssh-agent -s)"
bind: Permission denied
unix_listener: cannot bind to path: /tmp/ssh-ZqYqSabxjZeA/agent.9328
Run Code Online (Sandbox Code Playgroud)
但是,如果我以root身份运行,则可以成功:
[user@arch ~]$ eval "$(sudo ssh-agent -s)"
[sudo] password for user:
Agent pid 9146
Run Code Online (Sandbox Code Playgroud)
但是我很确定我不想以root身份执行SSH。
继续前进,然后当我尝试使用时ssh-add,我也会遇到权限错误,但是这次是标准用户和root用户:
[user@arch ~]$ ssh-add .ssh/id_rsa.pub
Could not open a connection to your authentication agent.
[user@arch ~]$ sudo ssh-add .ssh/id_rsa.pub
Could not open a connection to your authentication agent.
Run Code Online (Sandbox Code Playgroud)
所以现在我真的很困惑。
我尝试以根用户身份打开bash进程来执行此操作,但是1)我不喜欢这个想法,2)它仍然不起作用,但这一次是出于不同的原因:
[user@arch ~]$ sudo ssh-agent -s
[root@arch ~]# ssh-add …Run Code Online (Sandbox Code Playgroud) 我刚开始学习Ruby,但我已经有了很多想法,可以利用它作为OOPL的独特性.标题中恰当地描述了我的第一个:是否可以在Ruby中创建(或模拟)关键字?我在repl中玩了一下,发现了一些带有别名的有趣的东西.
例如,如果您尝试通过说明对关键字类别名
alias :magic :class
Run Code Online (Sandbox Code Playgroud)
它似乎有效,因为它输出nil.但是,它只是混叠Object#class方法; 我的猜测是没有办法为关键字设置别名,因为关键字不是常量,很可能硬编码到解释器本身.
(但这个小实验确实有一个有趣的结果.通常,你不能在Object#class没有显式self标识符的情况下调用该方法;只需输入classrepl会产生语法错误,因为它与关键字混淆class.但是,通过别名Object#class方法,解释器不再混淆,因此您可以使用没有标识符的别名.非常漂亮.)
现在,由于我对Ruby的了解有限,我认为模拟关键字的方法class就是这样做:
# in some file Magic.rb
module Magic
def self.type
# do something to evaluate the given block as a class definition
yield if block_given?
end
end
Magic.type Awesome do
def initialize;end
def who_am_i?
puts "I'm Awesome!"
end
end
x = Awesome.new # desired output: #<Awesome:0x1234abc>
x.who_am_i? # desired output: "I'm Awesome!"
Run Code Online (Sandbox Code Playgroud)
但这比我希望的更加丑陋.有什么想法吗?
编辑:经过一些修补和谷歌搜索,我发现了我认为是一个很好的解决方案,利用匿名类实例化,块和 …
作为一个小爱好项目,我正在尝试建立自己的对象系统.我想知道是否有一种方法可以将所有类的默认继承更改Object为我的基类Entity,这样每当我创建一个新类时,我都不必明确说出class Thing < Entity; 理想情况下,我只能说class Thing并将其默认超类作为我的Entity班级.