That is C++ levels of "why the fuck did they add that."
this post was submitted on 21 Nov 2024
302 points (90.6% liked)
Programmer Humor
34834 readers
183 users here now
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
- Posts must be relevant to programming, programmers, or computer science.
- No NSFW content.
- Jokes must be in good taste. No hate speech, bigotry, etc.
founded 5 years ago
MODERATORS
Makes sence if u think about it. We use comments as docstrings that the interpreter has an understanding of. Python lets u fuck with its internals (at least in an immutable manner) so why not fuck with comments.
The best language is complete, succinct, orderly and clear. And never adds a single goddamn thing ever.
TMI 😢
Hmm, works in php as well!
function add(): float
{
$trace = debug_backtrace();
$file = $trace[0]['file'];
$line = $trace[0]['line'];
$content = file($file);
$lineContent = trim($content[$line - 1]);
$ast = token_get_all("<?php\n{$lineContent}");
$args = [];
foreach ($ast as $token) {
if (!is_array($token)) {
continue;
}
if ($token[0] !== T_COMMENT) {
continue;
}
$commentContent = $token[1];
if (str_starts_with($commentContent, '#')) {
$commentContent = substr($commentContent, 1);
} else {
$commentContent = substr($commentContent, 2);
}
$commentContent = trim($commentContent);
$commentContent = preg_replace("@\s+@", " ", $commentContent);
$args = explode(" ", $commentContent);
$args = array_map(function (string $arg) {
if (!is_numeric($arg)) {
throw new InvalidArgumentException('Argument must be a number');
}
return str_contains($arg, '.') ? (float) $arg : (int) $arg;
}, $args);
break;
}
return array_sum($args);
}
echo add(); // 1 2 3
echo add(); // 7 8 9
Love this. I am toying with an idea of how to accomplish this in rust.
use std::fs;
fn add_from_comment(file: &str, line: u32) -> f64 {
let source = fs::read_to_string(file).expect("Failed to read source file");
let source_line = source.lines().nth((line - 1) as usize).expect("Line not found");
if let Some(comment_start) = source_line.find("//") {
let comment = &source_line[comment_start + 2..].trim();
let numbers: Vec<f64> = comment
.split_whitespace()
.map(|num| num.parse::<f64>().expect("Invalid number in comment"))
.collect();
return numbers.iter().sum();
}
0.0
}
macro_rules! add {
() => {
add_from_comment(file!(), line!())
};
}
fn main() {
let result = add!(); // 7 8 9
println!("{}", result); // Outputs: 24
let result2 = add!(); // 1 4 3
println!("{}", result2); // outputs 8
}
Nice I would have tried it with a build script but this works too. Good job!!!!