我正在研究Michael Hartl的Ruby on Rails教程,并且我添加了代码来显示用户的Gravatar图像.它在Firefox和Safari中运行良好,但在Chrome中则不行(图像不会显示).
风景:
#app/views/users/show.html.erb
<% provide(:title, @user.name) %>
<h1>
<%= gravatar_for @user %>
<%= @user.name %>
</h1>
Run Code Online (Sandbox Code Playgroud)
和帮手:
#app/helpers/users_helper.rb
module UsersHelper
# Returns the Gravatar (http://gravatar.com/) for the given user.
def gravatar_for(user)
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
image_tag(gravatar_url, alt: user.name, class: "gravatar")
end
end
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
给定一个红宝石类
class Thing
class << self
NUM = 3
def speak
NUM.times { puts "Hi!" }
end
end
end
Run Code Online (Sandbox Code Playgroud)
我无法Thing::NUM从课外访问。如果改为
class Thing
NUM = 3
class << self
def speak
NUM.times { puts "Hi!" }
end
end
end
Run Code Online (Sandbox Code Playgroud)
Thing.speak仍然按预期工作,但我现在也可以访问Thing::NUM. 我知道这个class << self习惯用法打开了对象的单例类,但我很困惑为什么这样定义的类方法可以公开访问而常量不是。
在较高的层次上,我知道我们使用#include语句使其他文件中的代码可用于当前文件。但我不明白为什么我们要包含一个头文件,其中包含声明但没有定义。
也许我需要更多地了解编译/链接过程才能完全理解其机制,但是是否有一个我一开始就未能掌握的高级概念?
编辑:所有答案都有助于澄清我的问题,归结为:一旦我们通知编译器在其他地方定义了函数,它如何确定在哪里可以找到该定义?
我读过的关于地址运算符的大部分内容&,都说它用于获取地址 - 地址。不过,我最近听到它的描述有所不同,因为它产生了一个成熟的指针。
鉴于以下 C 代码,
int i1 = 5;
int *p1;
p = &i1;
Run Code Online (Sandbox Code Playgroud)
我的理解是通过存储存储数据的地址来p1引用 int并记住该位置中的数据将被解释为 an (这决定了要读取的字节数以及如何解释读取的数据)。5i1int
地址运算符是否同时产生地址和“类型感知”,或者类型感知是否只是隐含的,因为它p1被声明为int指针?
让我对此感到疑惑的一件事是看到如下代码:
void myFunc(int *ptr);
int i = 5;
myFunc(&i);
Run Code Online (Sandbox Code Playgroud) As explained in this answer, the "right" way to check if a variable is set in bash looks like this:
if [ -z ${var+x} ]; then
echo "var is unset"
else
echo "var is set to '$var'"
fi
Run Code Online (Sandbox Code Playgroud)
What I'm interested in is how to extract this into a function that can be reused for different variables.
The best I've been able to do so far is:
is_set() {
local test_start='[ ! -z ${'
local test_end='+x} ]'
local tester=$test_start$1$test_end …Run Code Online (Sandbox Code Playgroud) Esc我在 Tmux 的复制模式中使用 vi 键绑定,如果有的话,我想明确当前的选择,或者如果没有选择任何内容,则退出复制模式。
bind -T copy-mode-vi Escape if-shell -F '#{selection_active_flag}' \
'send-keys -X clear-selection' \
'send-keys -X cancel'
Run Code Online (Sandbox Code Playgroud)
我希望 Tmux 可以公开一个指示选择状态的变量(我是selection_active_flag为了表达我的意图而编造的,它实际上并不存在),类似于window_zoomed_flag(确实存在)。
有办法实现这一点吗?
我有两节课,Master和Slave.该Master班HAS_ONE slave的Slave类属master.
给定两个关联对象,master_a以及slave_a(slave_a属于哪个master_a),如何在不破坏slave_a数据库的情况下取消链接?我基本上需要"解放" slave_a.我试过了master_a.slave.delete,slave_a从数据库中摧毁了.
我也试过master_a.slave.update_attribute(:master_id, nil),但下次master_a.save打电话,它会重新连接它们.这是否表示我正在忽略的回调(其中大师班有很多),或者我只是使用错误的工具来完成工作?
编辑:我应该指定,我不想销毁任何一个对象,只有这两个特定实例之间的链接.此外,真正的模型实际上并不称为主模型和奴隶模型,这只是我正在使用的一个说明性示例.
我正在编写一个 shell 脚本来对给定目录中的音频文件进行编码,并将 .flac 文件输出到另一个目录。我的概念验证逐个循环遍历每个文件,并通过 ffmpeg 运行它。我怀疑有一种方法可以在单个命令中将输入文件的整个列表传递给 ffmpeg,但一直无法弄清楚。
我当前的版本如下所示:
#!/bin/sh
encode_album() {
local artist=$1; shift
local album=$1; shift
local in_dir="${HOME}/Music/raw-imports/${artist}/${album}"
local out_dir="${HOME}/Music/library/${artist}/${album}"
mkdir -p "${out_dir}"
find "${in_dir}" -type f -name *.aiff | while IFS= read -r in_file; do
local track_name=$(basename "${in_file}" .aiff)
local out_file="${out_dir}/${track_name}.flac"
encode_track "${in_file}" "${out_file}"
done
}
encode_track() {
local in_file=$1; shift
local out_file=$1; shift
</dev/null ffmpeg -i "${in_file}" -codec:a flac "${out_file}"
}
encode_album "Rolf Lislevand" "La Mascarade"
Run Code Online (Sandbox Code Playgroud)
这是可行的,但是我是否需要将这些文件一个接一个地输入 ffmpeg,或者它是否能够接受一批文件并处理它们?
在一个shell脚本,据我所知,$#和${#@}相同的行为,既给位置参数的个数.这两者之间是否存在差异?在哪种情况下,哪一种优于另一种?
bash ×2
c ×2
associations ×1
ffmpeg ×1
gravatar ×1
header-files ×1
include ×1
key-bindings ×1
pointers ×1
private ×1
ruby ×1
scope ×1
shell ×1
tmux ×1